1 .什么时候用弦图
弦图主要是来表示两两之间数量关系的。例如, A地 => B地 之间的人口流动量。
又如,每个销售员在不同地区的销售金额。又如,每个年龄组不同收入组别的月均购物金额。
只要有三列数值,第一列是文本,第二列也是文本,第三列是数值,第三列表示的第一列与第二列关系的强度,都可以用弦图来表示。
第一列和第二列可以是同一类(如都是地名),第二列和第二列可以是不同类。前者更适合弦图的本意。后者是弦图的扩展,也就是说,各种交叉列表也可以用弦图表示,但这样做需要慎重,这样作图虽然酷炫,但是看图的人理解可能会出现困难。
人口流动弦图:第一列是地名,第二列也是地名,第三列是数值
每个销售员X不同地区的销售金额图:第一列是销售员名称,第二列是区域名称,第三列是每个销售员在这个地区的销售金额
年龄X收入的月购物金额:第一列是不同年龄组,第二列是不同收入组,第三列是每个年龄组不同收入情况下的月均购物金额
二 怎么实现弦图
1.对于不写代码的人
推荐图表秀https://www.tubiaoxiu.com/,把数据按照要求整理好上传可以。
(弦图在关系图类别中,觉得配色不满意可以重新选择配色)
使用图表秀的过程很方便理解弦图的数据结构。
弦图就是使用两种数据结构,一种是三列,一种就是对角矩阵。
*图表秀可以很方便理解数据结构和作图的过程,并且插入PPT等文档。但是图表秀下载图片需要会员充值,所以你需要AI或者打印出来的高清图,就很难用图表秀表示。
2.对于写代码的人
用R语言,D3都可以实现这种效果。这里用R语言为例来说明。
用R语言画弦图主要依靠这个circlize包。
需要弄清楚circlize对弦图几个部分的界定。
sector,就是边上一圈,每一圈代表第一列的一个名称;link,连线。
R语言实现代码如下:
library(circlize)#载入包
migration <- read.csv("cityz.csv",header=TRUE,stringsAsFactors = FALSE)#载入整理好的数据矩阵,可以是三列,可以是对角矩阵,这里载入的是
sectorc <- read.csv("sectorc.csv",header=FALSE,stringsAsFactors = FALSE)
sectorc <- as.vector(sectorc$V1)
这里的csv文件是这样的
#载入 sector的颜色。必须是一个向量。按照第一列名称出现的顺序对应配颜色。用十六进制的颜色编码来表示(如#EC882)。这里载入的sector颜色如下,对应的第一列出现的sector顺序,是佛山,深圳,东莞,香港,广州。在R语言里转化为1个向量
linkc <- read.csv("linkc.csv",header=FALSE,stringsAsFactors = FALSE)
linkc <- as.vector(linkc$V1)
#载入link的颜色。link的颜色是migration的数据顺序一一对应的。并不建议link的颜色另起一套颜色。这样配色会特别混乱。
这里载入的link颜色如下,依次对应migration数据表中的,佛山-广州,深圳-广州,东莞-广州,香港-广州,广州-深圳……
link颜色一般是和sector有关:和第一列同一套颜色即可。对于交叉列表数据,可以设定同一个sector出发的link都是同一个颜色。
link颜色与sector完全无关:所有link都固定一种颜色,但是不推荐这样做,效果不太好。
chordDiagram(migration, grid.col = sectorc,col=linkc,transparency = 0.7) #grid.col 是设置sector颜色,col设置的是link颜色,transparency加一个透明度会显得好看。
circos.clear()
这个比之前的图更清晰的是,迁入广州的link都是用和广州的sector是一样颜色,所以广州这个sector的其他颜色,就是从广州迁出到其他地方的。这样一来,迁入迁出就很清晰。
另,circlize这个包很丰富,如果要改进细节,可以查看具体文档。https://cran.r-project.org/web/packages/circlize/circlize.pdf
这个图在Rsudio 导出的时候,可以设置任意的分辨率。可以满足高分辨率的制图要求。
三 怎么画好看的弦图
弦图好看不好看,和配色很有关系。
推荐一个配色网站 http://www.peise.net/tools/web/ 选择类似色搭配,一般会出现5种以上的颜色。例如这样的一套类似色。如果你PPT主题是蓝绿色的,用这套颜色配置黑色背景效果会不错。
另外有几个诀窍可以参考:
1.sector和link越多,弦图显示效果越好。
如果你的sector和link很少(不超过5),用弦图的时候,只用一种主题颜色和它的渐变色就好了。
2.配合你PPT的主题色。
查看PPT的主题色。PPT主题色往往有几组,弦图的颜色在主题色附近选择同一个系列深浅不一的颜色即可。 这样的配色符合PPT风格。
3.背景为白色:
配色建议推荐上面案例中几种颜色sector和link。如果sector数量大于5,以上面5种颜色为主色,在主色附近选择渐变的颜色。背景为白色,配色要显得比较淡雅的话,最好少用纯色。
纯色是HSV 中 Saturation == 100% ,也就是不含灰色的颜色。也就是,RGB中有一个值为0的颜色,或者RGB其中两个数值相同的颜色,这样的颜色容易显得“大红大绿”,尽量少用。
4.背景为深色:
黑色背景的图片sector和link就可以用纯色。推荐用深色背景,会比白色背景更让人觉得不明觉厉。
5.配色的原则
背景为白色,面积比较大的sector和link,建议用浅色;面积都比较小的sector和link,建议用深色。
背景为黑色则相反。