上一篇我们利用画了气泡图(相关链接:),本期的教程是将气泡矩阵图原来的气泡变成饼图或环图,从而使技术功效气泡图增加一个新的数据分析维度。

感谢上一篇读者Zoe,Nano的留言和建议,这次我们的程序增加了数据标签的显示功能,插入了可选择R语言绘图风格的语句,并改进了自动添加坐标,这个版本的程序不需要再手动在程序里逐一键入坐标轴上的“技术手段”和“技术效果”啦,可以自动对应Excel坐标生成横纵坐标标签。

糖果色气泡饼/气泡环自动生成方法:

STEP 1:

将Excel(示例数据:百度网盘链接:,密码: v5vw)按照如下格式准备好。

Excel包含多个工作表,第一个工作表中是技术功效表,其中的数据大小代表气泡的大小(也就是饼图或者环图大小),如下图所示:

其他的工作表中是每一个细分技术领域(技术手段和技术效果相对应的细分技术领域)中的文献分布,比如可以是该细分技术领域的主要申请人、主要国家、或是专利的法律状态等,如下图所示:

将该Excel表命名为“散饼数据表.xlsx”。如果你要修改这个Excel表的名称,那么对应的修改程序中的“散饼数据表.xlsx”即可。

STEP2:

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

2) 复制程序,修改读入excel名称、设置图片标题(修改“XXX”改为所需的领域):

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

得到如下效果:

矩阵气泡饼图

矩阵气泡饼图

中心红色数据为该环的数据量总和,三个黑色数据为不同部分的数据量:

是不是很简单呢~

“矩阵气泡饼图”程序及说明如下:

numpy as np #导入的数值计算扩展包numpy,并重命名为np

. as plt #导入的绘图扩展包,并重新命名为plt

as pd #导入的数据处理扩展包,并重命名为pd,该包用于读写excel文件

. as

#plt.style.use(”)#打开或者关闭R语言风格绘图

=pd.(‘散饼数据表.xlsx’,’工作表1′)#从excel的工作表1中读出数据,sheet名称根据实际情况修改

x=[i+1for i in range(len(.))]#获取数据表的列,作为x轴辅助绘图数据

=[i for i (len(.index))]#获取纵轴有多少行

y = [[i for in range(len(x))] for i in range(1,len()+1)]#生成y轴辅助数据

fig, ax = plt.()#创建子图

= [‘gold’, ”, ”,”]#颜色列表

ax.set(=”equal”)#设置图形的对称,不然饼会椭圆

for index in range(len()):#对转置后的每一列进行循环

for i,j,r inzip(x,y[index],.T[.index[index]]):#循环执行,每次从x,y[index]中读取一个数,从转置后的excel表格中读取一列中的一个数据

sheet=pd.(‘散饼数据表.xlsx’,str(.[i-1])+str(.index[index]))#从excel中的相应sheet中读取数据,根据excel中的工作表名修改

ifr/max(.max())/2 < 0.2:

ax.pie(sheet[‘数量’], =None, =None, =’w’,

=’%d’, =False, =90,=1/2,=(i, j),frame=True,={”:8})#绘制散饼图

ax.pie(sheet[‘数量’], =None, =None, =,

=None, =False, =90,=r/max(.max())/2,=(i,j),frame=True)

else:

ax.pie(sheet[‘数量’], =None, =None, =,

=’%d’, =False, =90,=r/max(.max())/2,=(i,j),frame=True,={”:8})#绘制散饼图,面积大小由调节。

#ax.pie([1], =np.sqrt(r/np.pi)/30/2,=’w’,=(i,j),frame=True)#增加甜甜圈的圈,圈大小由调节

#ax.text(i,j,str(r),=int(np.sqrt(r/np.pi)*0.8),

#=”,=”)#增加数据标签,字体大小由调节

plt.grid(True)#增加栅格

plt.(‘技术手段分类’,size=14)#x轴说明

plt.(‘技术效果’,size=14)#y轴说明

plt.title(‘XXX领域技术功效分析’,size=14)#图片名称

plt.(x,.)#利用excel表中的表格横轴更新x轴标度

plt.([i+1for i (len(.index))],list(.index),size=14)#利用excel表中的表格纵轴更新y轴标度

plt.xlim(0,len(.)+1)#设置x轴范围,美化图表

plt.ylim(0,len(.index)+1)#设置y轴范围,美化图表

plt.(=[.Patch(color=[i],label=(sheet.index[i])) for i in range(len(sheet.index))]

,loc=’best’,=(1.05,1.0), =0.)

plt.show()#显示图片

“矩阵气泡环图”程序及说明如下:

numpy as np #导入的数值计算扩展包numpy,并重命名为np

. as plt #导入的绘图扩展包,并重新命名为plt

as pd #导入的数据处理扩展包,并重命名为pd,该包用于读写excel文件

. as #导入用于生成图例的库

#plt.style.use(”)#打开或者关闭R语言风格绘图

=pd.(‘散饼数据表.xlsx’,’工作表1′)#从excel的工作表1中读出数据,sheet名称根据实际情况修改

x=[i+1for i in range(len(.))]#获取数据表的列,作为x轴辅助绘图数据

=[i for i (len(.index))]#获取纵轴有多少行

y = [[i for in range(len(x))] for i in range(1,len()+1)]#生成y轴辅助数据

fig, ax = plt.()#创建子图

= [”, ‘gold’, ”, ”]#颜色列表

ax.set(=”equal”)#设置图形的对称,不然饼会椭圆

for index in range(len()):#对转置后的每一列进行循环

for i,j,r inzip(x,y[index],.T[.index[index]]):#循环执行,每次从x,y[index]中读取一个数,从转置后的excel表格中读取一列中的一个数据

sheet=pd.(‘散饼数据表.xlsx’,str(.[i-1])+str(.index[index]))#从excel中的相应sheet中读取数据,根据excel中的工作表名修改

ifnp.sqrt(r/np.pi)/30 < 0.4:

ax.pie(sheet[‘数量’], =None, =None, =’w’,

=’%d’, =False, =90,=1/2,=(i, j),frame=True,={”:8})#绘制散饼图

ax.pie(sheet[‘数量’], =None, =None, =,

=None, =False, =90,=r/max(.max())/2,=(i,j),frame=True)

else:

ax.pie(sheet[‘数量’], =None, =None, =,

=’%d’, =False, =90,=r/max(.max())/2,=(i,j),frame=True,={”:8})#绘制散饼图,面积大小由调节。

ax.pie([1], =r/max(.max())/2/2,=’w’,=(i,j),frame=True)#增加甜甜圈的圈,圈大小由调节

ax.text(i,j,str(r),=8,

=”,=”,color=’red’)#增加数据标签,字体大小由调节

plt.grid(True)#增加栅格

plt.(‘技术手段分类’,size=14)#x轴说明

plt.(‘技术效果’,size=14)#y轴说明

plt.title(‘XXX领域技术功效分析’,size=14)#图片名称

plt.(x,.)#利用excel表中的表格横轴更新x轴标度

plt.([i+1for i (len(.index))],list(.index),size=14)#利用excel表中的表格纵轴更新y轴标度

plt.xlim(0,len(.)+1)#设置x轴范围,美化图表

plt.ylim(0,len(.index)+1)#设置y轴范围,美化图表

plt.(=[.Patch(color=[i],label=(sheet.index[i])) for i in range(len(sheet.index))]

,loc=’best’,=(1.05,1.0), =0.)#增加图例,并将其移到图框外显示

plt.show()#显示图片

上一篇的留言里,有读者采用R语言绘制了气泡图并分享了程序,很开心能抛砖引玉,欢迎大家一起探讨用不同的方式来实现数据可视化。

相关链接: