我想创建下面链接的图表。我有用二进制标志(0 = 红色,1 = 蓝色)编码的数据,该标志也是有序的。例如,我将用于假设创建下方左侧列的数据类似于以下链接中的表格
桌子
图表
谁能建议我如何做到这一点?谢谢。
假设您的数据表排列如下:
这应该容纳任意数量的等级和任意数量的列。运行宏,并选择包含所有二进制标志的单元格范围,例如:
它将创建如下图表:
Option Explicit
Sub BuildRankedBinaryChart()
Dim ws As Worksheet
Dim cht As Chart
Dim ax As Axis
Dim rngFlag As Range
Dim xVal As Double
Dim r As Long
Dim c As Long
Dim s As Long
Dim p As Long
Dim pt As Point
Set ws = ActiveSheet
On Error Resume Next
Set rngFlag = Application.InputBox( _
"Select the binary flags.", _
"Binary Flag", Type:=8)
If Err <> 0 Then
On Error GoTo 0
Exit Sub
End If
'## Determine what VALUES to use for each point:'
xVal = 1 / rngFlag.Rows.Count
ReDim xVals(1 To rngFlag.Columns.Count)
For c = 1 To rngFlag.Columns.Count
xVals(c) = xVal
Next
'## Add a new chart to the sheet.'
Set cht = ws.ChartObjects.Add(50, 50, 300, 200).Chart
'## Format the chart:'
With cht
.ChartType = xlColumnStacked100
.HasLegend = False
.Axes(xlPrimary).Delete
Set ax = .Axes(xlSecondary)
With ax
.HasMajorGridlines = False
.HasMinorGridlines = False
.Delete
.ReversePlotOrder = True
End With
End With
'## Each ROW in the table is a new series.'
For r = 1 To rngFlag.Rows.Count
'## Add a new series to the chart'
With cht.SeriesCollection.NewSeries
'## Assign the values calculated above'
.Values = xVals
'## Apply labels'
.ApplyDataLabels
'## Finally, fake out the labels and apply the color to each point.'
For p = 1 To .Points.Count
With .Points(p)
If rngFlag.Rows(r).Cells(1, p).Value = 1 Then
.Format.Fill.ForeColor.RGB = vbRed
.DataLabel.Text = 1
Else:
.Format.Fill.ForeColor.RGB = vbBlue
.DataLabel.Text = 0
End If
'## Use a white font which is more legible on the dark fill colors '
.DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = vbWhite
End With
Next
End With
Next
End Sub
图表中的每个数据点都将具有相同的大小(我认为这就是您想要的屏幕截图)。这个大小是通过将 1 除以表中的行数来计算的,例如,对于 6 行,它将是0.166666667
,因此堆叠的列全部相加为 100%。
值标签被覆盖,并分配为标志值 1 或 0。
颜色是红色或蓝色,基于 1 或 0 的值。我将字体颜色设置为白色,这样它在蓝色和红色填充时会更清晰。
下面的结果可以通过图表(无 VBA)使用堆叠条形图(并从默认值调整无数其他设置!)来实现:
编辑以回应要求更多细节的评论
一些(也许不是全部!)可能需要对默认设置进行调整:
边框
格式数据系列应设置为边框颜色实线(颜色可能默认为黑色,透明度为 0%)和边框样式为大约 3 pt(或等效,默认为其余Binary Flag
)Series1
。
数据点的颜色
格式数据系列Series1
应为填充、实心填充、颜色:红色和透明度 0%(Binary Flag
可能默认为蓝色且不需要调整)。
Format Axis
For X Axis, Axis Options all set to Fixed, 值最小值:0,最大值:1,主要:1,次要:1 和主要刻度线类型:,次要刻度线类型:和轴标签:全部设置为无. 垂直轴交叉:设置为大约 0.75。
对于 Y 轴,线条颜色设置为无线条。
图例
删除。
系列选项
设置为系列重叠分离 100%,间隙宽度无间隙 (0%),绘图系列默认为主轴。
大小 将右侧图表边框向左拖动以适应。
选择
虽然使用条件格式可能更容易(假设排名排序顺序颠倒):