![](http://mmbiz.qpic.cn/mmbiz_png/4g3qkiasRY1FoVibc7t5aX3Y4aibO3ssrqtzXasIPXk5ib2QrcEToz69u8ZtUlVwPOzuZm7udGczzYTe15UqjwqOGA/0?wx_fmt=png)
弦图是一种用于描述节点之间关系的图表,属于流可视化类型的一种(相关链接:图表介绍 | 流可视化)。
弦图中,节点位于圆环上,弦位于圆环内部。节点之间的连线(弦)表示两个节点之间存在联系,而连线(弦)的粗细表示两个节点之间的联系程度。
弦图在专利信息的可视化展示中也有很多应用:
本文为大家介绍第一种弦图(展示申请人之间的合作申请)的Python制作方法。下次再介绍第二种带箭头的弦图的制作方法。
截至今天为止,尚没有开源免费的Python库能完美且简单地绘制弦图。在绘制弦图方面常用的是R语言、Echarts或者D3.js。尽管如此,我们还是可以用Python方便的绘制出简易的弦图。
绘制弦图不再使用matplotlib绘图包,而是使用Bokeh绘图包。Bokeh绘图包已经默认集成于Anaconda软件(是3.6版本哟)中。
STEP 1:准备表格
按照如下模式建立excel表格,行数和列数可以根据需要自行输入,下表数据为生成的随机数据。
表中字母代表不同的申请人或者发明人。表格中的数字表示两两申请人或者两两发明人之间的合作申请数量。
![](http://mmbiz.qpic.cn/mmbiz_png/4g3qkiasRY1FoVibc7t5aX3Y4aibO3ssrqt9I64ah3YSCBnSUPfCEbHibeeCBic7qgc4QaKaH9QNUgQZvdO5DTx5cPA/0?wx_fmt=png)
STEP 2:程序修改
1)复制粘贴程序
将文末程序复制粘贴至spyder中的源程序编辑器(单击file,new file,跳出一个新文件)
![](http://mmbiz.qpic.cn/mmbiz_png/4g3qkiasRY1Fg8ViakncgCjCEvot3QmIURickq0ddYV8MoT26Ribqx8OibWGMclXIibfcAw0pll1n7iaiaZkfOHMQayoEg/0?wx_fmt=png)
2)适应性地修改程序
修改程序中读入的excel名称,使其与待输入excel表格名称保持一致;
修改输出图的名称(默认名为my_chord_diagram)。
![](http://mmbiz.qpic.cn/mmbiz_png/4g3qkiasRY1FoVibc7t5aX3Y4aibO3ssrqtia7rgauer8wtFC1OpUQ6KoystSwrmqJDDrpic80Ly4TzjlaIrLtDgBeQ/0?wx_fmt=png)
3)生成图表
保存,单击F5或者绿色向右的小箭头。
![](http://mmbiz.qpic.cn/mmbiz_png/4g3qkiasRY1Fg8ViakncgCjCEvot3QmIURpFAe69PtzH56reqibUCv4kcV46q8rJWjXOr84uYL9eZn5vsgyXM3KKQ/0?wx_fmt=png)
得到如下效果:
![](http://mmbiz.qpic.cn/mmbiz_png/4g3qkiasRY1FoVibc7t5aX3Y4aibO3ssrqtzXasIPXk5ib2QrcEToz69u8ZtUlVwPOzuZm7udGczzYTe15UqjwqOGA/0?wx_fmt=png)
弦图程序及说明如下:
import pandas as pd #导入pandas,用于操作excel文件
from bokeh.charts import output_file, Chord #导入bokeh扩展包,用于绘制弦图
from bokeh.io import show #导入文件操作中的显示网页函数
df=pd.read_excel('Chord.xlsx')#打开excel文件
my_links=[] #备用空列表
for i in range(len(df.columns)):#外层循环,轮询excel每个列
print(df[df.columns[i]])
for j inrange(len(df.index)):#内层循环,轮询excel每一行
my_links.append({'target':(i+len(df.index)),'source':j,'value':df[df.columns[i]][j]})#生成从源到目标的字典
index=list(df.index)#将excel行标签转化为列表
index.extend(df.columns)#合并列表,得到所有标签
my_nodes=pd.DataFrame([{'name':i} for i in index])#生成节点数据框
my_nodes_df = pd.DataFrame(my_nodes)#生成用于绘图的节点数据
my_links_df = pd.DataFrame(my_links)#生成用于绘图的节点间连接
my_source_data =my_links_df.merge(my_nodes_df, how='left',
left_on='source', right_index=True)#合并数据,顺序按从源到目标的顺序
my_source_data =my_source_data.merge(my_nodes_df, how='left',
left_on='target', right_index=True)#再次合并数据,顺序按从目标到源的顺序
chord_from_df = Chord(my_source_data, source="name_x", target="name_y", value="value")#绘制弦图
output_file(
'my_chord_diagram.html')#当前文件夹输出网页文件
show(chord_from_df)#显示图片
保护版权人人有责
小编心血,拒绝盗图,如需转载,后台联系
![](http://mmbiz.qpic.cn/mmbiz/4g3qkiasRY1F9LgoG2QU07dFgrsOrNkWOnzs1MXvE7aj4A6mPZeCc7z2AGsAD5aIJ3qQ63sR0ibO1D4D6HKwFI6g/640?wx_fmt=jpeg)
·↑长按识别二维码关注 ↑·
微信号:专利分析可视化
推特帐号:IPinfographics