Как я могу изменить цвет точки на диаграмме рассеяния в VBA/Excel в зависимости от координат X, Y самой точки?

Я разрабатываю симулятор на основе Excel, который запускает определенный тест 1000 раз. Результатом каждого теста являются две координаты. Эти координаты записываются в диапазон. Затем я создаю график X-Y Scatter на основе этого диапазона.

Что я сейчас хочу сделать, так это просмотреть каждую из 1000 точек графика и изменить цвет этой точки на основе координат X и Y точки. В частности, я хочу взять X Mod (Half Max X) и Y Mod (Half Max Y), чтобы создать эффект увеличения интенсивности цвета по точкам, близким к середине графика.

Код, который я хочу использовать, выглядит следующим образом:

Temp = "'" + FirstCalcs.Name + "'!" + FirstCalcs.Cells(SOWD + 3, 2).Address + ":" + FirstCalcs.Cells(SOWD + 3, NumOfTests + 1).Address
Temp2 = "'" + FirstCalcs.Name + "'!" + FirstCalcs.Cells(SOWD + 4, 2).Address + ":" + FirstCalcs.Cells(SOWD + 4, NumOfTests + 1).Address
Set chtChart = Charts.Add
With chtChart

    Do Until .SeriesCollection.Count = 1     ' remove extra series, which Excel spawns like rabbits, for some reason
        .SeriesCollection(1).Delete
    Loop

    .Name = Institution + " summary"
    .ChartType = xlXYScatter
    'Link to the source data range.

    '.SetSourceData Source:=FirstCalcs.Range(Temp)

    .SeriesCollection(1).Values = Temp2
    .SeriesCollection(1).XValues = Temp

    For Each pts In .SeriesCollection(1).Points

            .Format.Fill.Solid

            'The next line is what I can't figure out
            .MarkerBackgroundColor = RGB(XFunctionOf(.pts.XCoor),  YFunctionOf(.pts.YCoor), 128)

            .MarkerStyle = xlMarkerStyleDiamond
            .MarkerSize = 10
    End With

    Next i

    .HasTitle = True
    .ChartTitle.Text = "Summary"
    .Axes(xlCategory, xlPrimary).HasTitle = True
    .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T"
    .Axes(xlValue, xlPrimary).HasTitle = True
    .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Time before T achieved"
    .HasLegend = False

End With

Однако я не могу найти способ получить значение X AND Y, чтобы выполнить на них необходимую функцию. Я могу варьировать цвет в соответствии с номером самой точки (от 1 до 1000), но это не то, что я хочу сделать - цвет является функцией координат X, Y каждой точки. Стоит сказать, что диапазоны как координат X, так и Y являются переменными, т.е. тест не возвращает результаты, которые каждый раз находятся в одном и том же масштабе.

Любая помощь будет чрезвычайно признательна и благодарна вам заранее.


person user2723257    schedule 27.08.2013    source источник


Ответы (1)


Вот простой пример того, как получить доступ к значениям x и y для каждой точки:

Sub Tester()

    Dim s As Series, i As Long, x, y

    Set s = ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)

    For i = 1 To s.Points.Count
        x = s.XValues(i)
        y = s.Values(i)
        If x > 3 And y < 40 Then
            s.Points(i).MarkerBackgroundColor = vbRed
        End If
    Next i

End Sub
person Tim Williams    schedule 27.08.2013
comment
Спасибо за это, Тим. Позвольте мне поиграть и посмотреть, смогу ли я это сделать. Ночью я также наткнулся на включение меток данных, извлечение текста и его разделение (не элегантно, я понимаю), однако я еще не понял, как включить метки X и Y. Я буду твоей первой (так проще). Я опубликую свое решение, как только оно заработает. Еще раз спасибо, Марк. - person user2723257; 28.08.2013
comment
Работало отлично, и с помощью mcpher.com/Home/excelquirks/snippets/heatmap а так у меня отличный результат. - person user2723257; 28.08.2013