利用Python绘制弦图

弦图是一种用于描述节点之间关系的图表,属于流可视化类型的一种(相关链接:图表介绍 | 流可视化)。

弦图中,节点位于圆环上,弦位于圆环内部。节点之间的连线(弦)表示两个节点之间存在联系,而连线(弦)的粗细表示两个节点之间的联系程度。

弦图在专利信息的可视化展示中也有很多应用:

展示申请人之间的合作申请,弦的粗细表示不同申请人之间合作申请数量的多少,这种数据中,合作申请是双向的,因此弦图中的弦不需要加箭头。

展示专利申请的流向,弦的粗细表示某一国家的申请人向另一国家专利局提交的申请数量多少,这种数据往往需要在弦图的弦上加上箭头来表示申请的流动方向。(相关链接:[每日一图]专利申请五局流向分析的弦图可视化)。

本文为大家介绍第一种弦图(展示申请人之间的合作申请)的Python制作方法。下次再介绍第二种带箭头的弦图的制作方法。

截至今天为止,尚没有开源免费的Python库能完美且简单地绘制弦图。在绘制弦图方面常用的是R语言、Echarts或者D3.js。尽管如此,我们还是可以用Python方便的绘制出简易的弦图。

绘制弦图不再使用matplotlib绘图包,而是使用Bokeh绘图包。Bokeh绘图包已经默认集成于Anaconda软件(是3.6版本哟)中。

STEP 1:准备表格

按照如下模式建立excel表格,行数和列数可以根据需要自行输入,下表数据为生成的随机数据。

表中字母代表不同的申请人或者发明人。表格中的数字表示两两申请人或者两两发明人之间的合作申请数量。

STEP 2:程序修改

1)复制粘贴程序

将文末程序复制粘贴至spyder中的源程序编辑器(单击file,new file,跳出一个新文件)

2)适应性地修改程序

修改程序中读入的excel名称,使其与待输入excel表格名称保持一致;

修改输出图的名称(默认名为my_chord_diagram)。

3)生成图表

保存,单击F5或者绿色向右的小箭头。

得到如下效果:

弦图程序及说明如下:

importpandasaspd#导入pandas,用于操作excel文件

frombokeh.chartsimportoutput_file, Chord#导入bokeh扩展包,用于绘制弦图

frombokeh.ioimportshow#导入文件操作中的显示网页函数

df=pd.read_excel('Chord.xlsx')#打开excel文件

my_links=[]#备用空列表

foriinrange(len(df.columns)):#外层循环,轮询excel每个列

print(df[df.columns[i]])

forjinrange(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}foriinindex])#生成节点数据框

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)#显示图片

欢迎转载,注明作者Emma序及专利分析可视化即可

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180112B0ECA400?refer=cp_1026

相关快讯

扫码关注云+社区