分享

【Excel商务图表】南丁格尔玫瑰图表制作方法

 ExcelEasy 2022-08-23 发布于北京

可以直接看文末视频讲解

什么是南丁格尔图表

南丁格尔图表,又称为玫瑰图,是一种常见的商务图表。它类似于饼图,都是通过圆形的一个扇区表示大小:

跟饼图不同的是,南丁格尔图表的每个扇区角度都是相同的,它是通过每个扇区的不同高度表示数据的大小。

上面的南丁格尔图表是基本形式,可以表达一个系列的数据(只有一种颜色),也可以表示多各系列数据(加上红色),但是最好是一个系列的数据全部小于另外一个系列的数据。如果数据参差不齐,看上去比较混乱,这时,可以采用下面的形式:

二者的主要区别:

  • 后者不同扇区间隔更大

  • 不同扇区之间起始角度有偏差,

制作方法

在Excel中,并没有南丁格尔图表的基本图表。我们可以通过雷达图实现这个图表。

在这个雷达图中,不同点的大小表现为图表中不同半径的圆上的点。这个原理是类似的。

如果我们如下图一样,在雷达图中添加多条长度一样的线(红色划线区域):

就可以实现南丁格尔图表。

制作基本型南丁格尔图表

对于这个基本型的南丁格尔图表,很明显,每个扇区占的角度=360°/扇区的数量。

因此,我们需要按如下方式制作作图数据。

首先,原始数据如下:

B列和C列是需要作图的不同系列。我们先看B列,我们要将其改造为:

这样的数据。简单说,原来的每个数据,如:分类为A的数值是6301,那么在作图数据中就需要出现36个6301,这里的36是每个数据占的角度。总共10个分类,每个正好是36。

而且在不同数据之间还要插入一个0值,用于在最终的图表中形成间隔。

要完成这件事情,可以手工复制粘贴。不用说,这样的工作比较枯燥繁琐。我们这里提供两个方法。

第一种方法是VBA,你可以使用下面的代码(以下代码直接复制即可,也可以按照文末的方法跟客服索要模板。需要将 代码中相应的地方修改为你自己数据的地址,详细修改方法见视频讲解)

'生成基本玫瑰图数据Sub ChartData_Basic()    '分类数据    Dim RngCat As Range    Set RngCat = Worksheets("玫瑰图-基本").Range("A2:A11")
'展示数据 Dim RngVal As Range Set RngVal = Worksheets("玫瑰图-基本").Range("B2:B11")
'作图数据开始单元格 Dim RngChartData As Range Set RngChartData = Worksheets("玫瑰图-基本").Range("E1")
'生成作图数据 Dim Count Count = Int((1 + (360 / RngCat.Rows.Count))) Set RngChartData = RngChartData.Resize(Count * RngCat.Rows.Count, 3) For i = 1 To RngCat.Rows.Count * Count If i Mod Count = 1 Then RngChartData(i, 1).Value = 0 Else RngChartData(i, 1).Value = Application.WorksheetFunction.Index(RngVal, 1 + Int(i / (Count + 0.1)))
End If
If (i + Int(Count / 2)) Mod Count > 0 Then
Else RngChartData(i, 2).Value = Application.WorksheetFunction.Index(RngVal, 1 + Int(i / (Count + 0.1))) RngChartData(i, 3).Value = Application.WorksheetFunction.Index(RngCat, 1 + Int(i / (Count + 0.1))) End If
Next iEnd Sub

如果你用不了VBA代码,你可以使用下面的方法,不过需要你使用Office 365:

你使用这个公式:

=MAKEARRAY(37*10,1,LAMBDA(r,c,IF(MOD(r,37)=1,0,INDEX(B2:B11,INT(r/(37+0.1))+1))))

这个公式里的37就是36+1,36的含义是每个数据点占据的角度,+1的意思是不同点之间加一个0用于间隔,10表示数据点的个数。你可以将其修改为你需要的值:

例如,如果你有11个数据点,每个的角度是360/11≈35,加上1就是36。

其中的B2:B11是用于展现的数据,你可以改成你自己的地址。

这个公式使用了MAKEARRAY函数,具体请参见我们以前的文章,这里就不详细介绍了。

选中生成的作图数据,然后再插入选项卡中选择雷达图(第三种类型):

插入图表:

图表主体已经做完了。删掉网格线,坐标轴,分类标签,就得到了南丁格尔图表:

接下来修改颜色。这里颜色的修改实际上是修改数据系列格式中的标记的填充色:

下面还需要添加标签。

这个标签也需要辅助的作图数据。

网上有方法,说的是通过添加一个饼图,然后添加饼图的标签。这个当然是最简单的,但是,这个方法添加的标签位置都在扇形的固定位置,不能跟随扇形大高度变化。所以,我们可以在雷达图中再次插入系列,这个系列中每个数据点在每个扇区的中间:

这样的线显然可以通过类似的公式完成(如果使用上面的VBA代码,直接就生成了辅助系列的数据):

=MAKEARRAY(37*10,1,LAMBDA(r,c,IF(MOD(r+18,37)>0,"",INDEX(B2:B11,INT(r/(37+0.1))+1))))

得到的数据是这样的:

对应每个作图数据,除了中间的点有值外,其余的点都是空的。

将这个数据作为新的系列添加到雷达图中,然后为这一列添加标签即可。

如果有另外的系列,就如法炮制:

可以添加多个系列。但是,除非每个系列的大小是依次减少的,否则,图表会比较混乱。

制作用于对比的南丁格尔图

如果用于对比的数据参差不齐,可以使用下图:

其实,这个图表的做法还是一样的:

如上图,实际上黄色系列扇区还是占36°,但是,只有中间的一部分真正有数据,而其他的都是0,而红色系列扇区也是36°,也只有中间部分真正有数据:

数据就是上面这种形式,红色数据的起始位置与黄色数据不同。

在模板中也提供了生成对比数据的代码:

'生成对比玫瑰图数据Sub ChartData_Adv()    '分类数据    Dim RngCat As Range    Set RngCat = Worksheets("玫瑰图-基本").Range("A2:A11")
'展示数据 Dim RngVal As Range Set RngVal = Worksheets("玫瑰图-基本").Range("B2:B11")
'作图数据开始单元格 Dim RngChartData As Range Set RngChartData = Worksheets("玫瑰图-基本").Range("E1")
'生成作图数据 Dim Count Count = Int((1 + (360 / RngCat.Rows.Count))) Set RngChartData = RngChartData.Resize(Count * RngCat.Rows.Count, 3) For i = 1 To RngCat.Rows.Count * Count If i Mod Count <= 7 Or i Mod Count >= 30 Then RngChartData(i, 1).Value = 0 Else RngChartData(i, 1).Value = Application.WorksheetFunction.Index(RngVal, 1 + Int(i / (Count + 0.1)))
End If
If (i + Int(Count / 2)) Mod Count > 0 Then
Else RngChartData(i, 2).Value = Application.WorksheetFunction.Index(RngVal, 1 + Int(i / (Count + 0.1))) RngChartData(i, 3).Value = Application.WorksheetFunction.Index(RngCat, 1 + Int(i / (Count + 0.1))) End If
Next iEnd Sub

如果是Office 365的用户,可以考虑使用下面的公式:

=MAKEARRAY(37*10,1,LAMBDA(r,c,IF(OR(MOD(r,37)<=7,MOD(r,37)>=30 ),0,INDEX(B2:B11,INT(r/(37+0.1))+1))))

其中if中的条件:

OR(MOD(r,37)<=7,MOD(r,37)>=30 )

公式中的7和30决定了0的个数和起始位置,可以自行修改。

   联系客服(底部菜单 -> 知识库 -> 客服),获取模板


加入E学会,学习更多Excel应用技巧

http://www./portal/learn/class_list

详情咨询客服(底部菜单-知识库-客服)

Excel+Power Query+Power Pivot+Power BI


Power Excel 知识库    按照以下方式进入知识库学习
Excel函数   底部菜单:知识库->Excel函数

自定义函数  底部菜单:知识库->自定义函数

Excel如何做  底部菜单:知识库->Excel如何做

面授培训  底部菜单:培训学习->面授培训

Excel企业应用  底部菜单:企业应用

也可以在历史文章中学习Excel,Power Query,Power Pivot,Power BI,Power Automate各种技巧。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多