programing

xy 산점도에서 열 값에 따라 점을 색칠하려면 어떻게 해야 합니까?

muds 2023. 4. 11. 22:39
반응형

xy 산점도에서 열 값에 따라 점을 색칠하려면 어떻게 해야 합니까?

다음 워크시트를 고려합니다.

     A       B        C        D
1 COMPANY  XVALUE   YVALUE   GROUP
2 Apple     45       35       red
3 Xerox     45       38       red
4 KMart     63       50       orange
5 Exxon     53       59       green

Excel의 산점도 함수를 사용하여 다음 차트를 만들었습니다.

여기에 이미지 설명 입력

그러나 차트의 각 점에는 다음과 같은 추가 속성이 있습니다.GROUP: . 4개의 그룹이 있습니다.red,orange,black ★★★★★★★★★★★★★★★★★」green 그(그룹명 턴(그룹명 그)), 각(그룹명 턴(그룹명 그)), 각(그룹명 패(그룹명 그)))을 볼 수 green예를 들어, 거의 항상 차트 왼쪽에 있습니다.)내 리스트는 500줄이기 때문에 수동으로 할 수 없습니다.떻게 하면 동동 동동동 ???

비 VBA 솔루션:

각 색상 그룹에 대해 해당 그룹의 Y 값을 나타내는 추가 데이터 그룹을 만들어야 합니다.이러한 그룹을 사용하여 그래프 내에 여러 데이터 세트를 만들 수 있습니다.

다음은 데이터를 사용한 예입니다.

     A       B        C        D                    E                        F                            G
----------------------------------------------------------------------------------------------------------------------
1| COMPANY  XVALUE   YVALUE   GROUP                 Red                     Orange                       Green
2| Apple     45       35       red         =IF($D2="red",$C2,NA()) =IF($D2="orange",$C2,NA()) =IF($D2="green",$C2,NA())
3| Xerox     45       38       red         =IF($D3="red",$C3,NA()) =IF($D3="orange",$C3,NA()) =IF($D3="green",$C3,NA())
4| KMart     63       50       orange      =IF($D4="red",$C4,NA()) =IF($D4="orange",$C4,NA()) =IF($D4="green",$C4,NA())
5| Exxon     53       59       green       =IF($D5="red",$C5,NA()) =IF($D5="orange",$C5,NA()) =IF($D5="green",$C5,NA())

그 후에는 다음과 같이 됩니다.

     A       B        C        D          E           F          G
---------------------------------------------------------------------
1| COMPANY  XVALUE   YVALUE   GROUP       Red         Orange     Green
2| Apple     45       35       red         35         #N/A       #N/A    
3| Xerox     45       38       red         38         #N/A       #N/A
4| KMart     63       50       orange     #N/A         50        #N/A
5| Exxon     53       59       green      #N/a        #N/A        59

이제 다른 데이터 세트를 사용하여 그래프를 생성할 수 있습니다.다음은 데이터 예를 보여 주는 그림입니다.

여기에 이미지 설명 입력

수 있어요.(X;Y)에서 " "로B:B ; E:E,B:B ; F:F,B:B ; G:G데이터를 추가할 때 그래프가 자동으로 업데이트되도록 합니다.

저도 비슷한 질문에 대답했습니다.

https://stackoverflow.com/a/15982217/1467082

만 하면 ..Points매기다'를 ..Format.Fill.ForeColor.RGB필요한 기준에 따라 값을 매길 수 있습니다.

갱신했다

다음 코드는 스크린샷에 따라 차트를 색칠합니다.이것은 3가지 색상만 사용하는 것을 전제로 하고 있습니다.값에 하고 대소문자의 할당을 할 수 .myColorRGB를 사용하다

스크린샷

Option Explicit
Sub ColorScatterPoints()
    Dim cht As Chart
    Dim srs As Series
    Dim pt As Point
    Dim p As Long
    Dim Vals$, lTrim#, rTrim#
    Dim valRange As Range, cl As Range
    Dim myColor As Long

    Set cht = ActiveSheet.ChartObjects(1).Chart
    Set srs = cht.SeriesCollection(1)

   '## Get the series Y-Values range address:
    lTrim = InStrRev(srs.Formula, ",", InStrRev(srs.Formula, ",") - 1, vbBinaryCompare) + 1
    rTrim = InStrRev(srs.Formula, ",")
    Vals = Mid(srs.Formula, lTrim, rTrim - lTrim)
    Set valRange = Range(Vals)

    For p = 1 To srs.Points.Count
        Set pt = srs.Points(p)
        Set cl = valRange(p).Offset(0, 1) '## assume color is in the next column.

        With pt.Format.Fill
            .Visible = msoTrue
            '.Solid  'I commented this out, but you can un-comment and it should still work
            '## Assign Long color value based on the cell value
            '## Add additional cases as needed.
            Select Case LCase(cl)
                Case "red"
                    myColor = RGB(255, 0, 0)
                Case "orange"
                    myColor = RGB(255, 192, 0)
                Case "green"
                    myColor = RGB(0, 255, 0)
            End Select

            .ForeColor.RGB = myColor

        End With
    Next


End Sub

x축 텍스트 범주를 코드화하여 단일 열에 나열한 다음 인접 열에 관련 텍스트 범주 코드에 대해 각 변수의 플롯 점을 나열하고 관련 없는 텍스트 범주 코드에 대해 빈 셀만 남겨두면 그래프를 분산하여 표시되는 결과를 얻을 수 있습니다.질문이 있으면 알려주세요.여기에 이미지 설명 입력

VBA 솔루션과 비 VBA 솔루션이 있는데 둘 다 정말 좋습니다.저는 Javascript 솔루션을 제안하고 싶었습니다.

엑셀에서 Javascript, HTML, css를 사용할 수 있는 Funfun이라는 엑셀 애드인이 있습니다.차트를 작성할 수 있는 스프레드시트가 내장된 온라인 편집기가 있습니다.

이 코드는 Chart.js로 작성했습니다.

https://www.funfun.io/1/ #/edit/5a61ed15404f66229bda3f44

이 차트를 작성하기 위해 스프레드시트에 데이터를 입력하고 json 파일로 읽었습니다.이것은short파일.

올바른 포맷으로 정리해서script.js차트에 추가할 수 있습니다.

var data = [];
var color = [];
var label = [];

for (var i = 1; i < $internal.data.length; i++)
{
    label.push($internal.data[i][0]);
    data.push([$internal.data[i][1], $internal.data[i][2]]);
    color.push($internal.data[i][3]);
}

그런 다음 지정된 색상과 위치를 가진 각 점을 사용하여 분산 차트를 만듭니다.

 var dataset = [];
  for (var i = 0; i < data.length; i++) {   
    dataset.push({
      data: [{
        x: data[i][0],
        y: data[i][1] 
      }],
      pointBackgroundColor: color[i],
      pointStyle: "cercle",
      radius: 6  
    });
  }

산란도를 작성한 후, 재미있는 엑셀 애드인에 URL을 붙여 엑셀에 업로드 할 수 있습니다.예를 들면 다음과 같습니다.

최종

이 작업이 완료되면 Excel에서 스프레드시트의 값을 변경하여 점의 색상 또는 위치를 즉시 변경할 수 있습니다.

차트에 점을 더 추가하려면 반경을 수정하기만 하면 됩니다.data에서shortjson 파일.

이 Javascript 솔루션이 도움이 되길 바랍니다!

공개 : fun fun 개발자입니다.

이것을 시험해 보세요.

Dim xrndom As Random
    Dim x As Integer
    xrndom = New Random

    Dim yrndom As Random
    Dim y As Integer
    yrndom = New Random
    'chart creation
    Chart1.Series.Add("a")
    Chart1.Series("a").ChartType = DataVisualization.Charting.SeriesChartType.Point
    Chart1.Series("a").MarkerSize = 10
    Chart1.Series.Add("b")
    Chart1.Series("b").ChartType = DataVisualization.Charting.SeriesChartType.Point
    Chart1.Series("b").MarkerSize = 10
    Chart1.Series.Add("c")
    Chart1.Series("c").ChartType = DataVisualization.Charting.SeriesChartType.Point
    Chart1.Series("c").MarkerSize = 10
    Chart1.Series.Add("d")
    Chart1.Series("d").ChartType = DataVisualization.Charting.SeriesChartType.Point
    Chart1.Series("d").MarkerSize = 10
    'color
    Chart1.Series("a").Color = Color.Red
    Chart1.Series("b").Color = Color.Orange
    Chart1.Series("c").Color = Color.Black
    Chart1.Series("d").Color = Color.Green
    Chart1.Series("Chart 1").Color = Color.Blue

    For j = 0 To 70
        x = xrndom.Next(0, 70)
        y = xrndom.Next(0, 70)
        'Conditions
        If j < 10 Then
            Chart1.Series("a").Points.AddXY(x, y)
        ElseIf j < 30 Then
            Chart1.Series("b").Points.AddXY(x, y)
        ElseIf j < 50 Then
            Chart1.Series("c").Points.AddXY(x, y)
        ElseIf 50 < j Then
            Chart1.Series("d").Points.AddXY(x, y)
        Else
            Chart1.Series("Chart 1").Points.AddXY(x, y)
        End If
    Next

최근에 비슷한 일을 해야 해서 아래의 코드로 해결했습니다.도움이 됐으면 좋겠다!

Sub ColorCode()
Dim i As Integer
Dim j As Integer
i = 2
j = 1

Do While ActiveSheet.Cells(i, 1) <> ""


If Cells(i, 5).Value = "RED" Then
ActiveSheet.ChartObjects("YourChartName").Chart.FullSeriesCollection(1).Points(j).MarkerForegroundColor = RGB(255, 0, 0)



Else

If Cells(i, 5).Value = "GREEN" Then
ActiveSheet.ChartObjects("YourChartName").Chart.FullSeriesCollection(1).Points(j).MarkerForegroundColor = RGB(0, 255, 0)

Else

If Cells(i, 5).Value = "GREY" Then
ActiveSheet.ChartObjects("YourChartName").Chart.FullSeriesCollection(1).Points(j).MarkerForegroundColor = RGB(192, 192, 192)

Else

If Cells(i, 5).Value = "YELLOW" Then
ActiveSheet.ChartObjects("YourChartName").Chart.FullSeriesCollection(1).Points(j).MarkerForegroundColor = RGB(255, 255, 0)

End If
End If
End If
End If

i = i + 1
j = j + 1

Loop



End Sub

제가 찾은 더 간단한 해결책은 데이터를 색상으로 정렬한 후 다른 데이터 범위를 자체 시리즈로 선택하고 Excel을 통해 자동으로 색칠하는 것이었습니다.

언급URL : https://stackoverflow.com/questions/17194105/how-can-i-color-dots-in-a-xy-scatterplot-according-to-column-value

반응형