社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

作图详解 | 利用Python绘制技术功效图的方法(第二辑)

专利分析可视化 • 7 年前 • 1212 次点击  

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

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


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

STEP 1:

将Excel(示例数据:百度网盘链接:https://pan.baidu.com/s/1eSvoBVc,密码: v5vw)按照如下格式准备好。

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

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

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

STEP2:

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

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


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

得到如下效果:

矩阵气泡饼图


矩阵气泡饼图

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


是不是很简单呢~



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

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

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

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

import matplotlib.patches as mpatches

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

 

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

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

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

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

 

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

colors = ['gold', 'lightcoral', 'lightskyblue','yellowgreen']#颜色列表

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

 

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

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

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

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

            ax.pie(sheet['数量'], explode=None, labels=None, colors='w',

     autopct='%d', shadow=False, startangle=90,radius=1/2,center=(i, j),frame=True,textprops={'fontsize':8})#绘制散饼图

            ax.pie(sheet['数量'], explode=None, labels=None, colors=colors,

     autopct=None, shadow=False, startangle=90,radius=r/max(sheet1.max())/ 2,center=(i,j),frame=True)

       else:

            ax.pie(sheet['数量'], explode=None, labels=None, colors=colors,

     autopct='%d', shadow=False, startangle=90,radius=r/max(sheet1.max())/2,center=(i,j),frame=True,textprops={'fontsize':8})#绘制散饼图,面积大小由radius调节。

           

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

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

       #       horizontalalignment='center',verticalalignment='center')#增加数据标签,字体大小由fontsize调节

     

plt.grid(True)#增加栅格  

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

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

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

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

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

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

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

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

           ,loc='best',bbox_to_anchor=(1.05,1.0),borderaxespad =0.)

plt.show()#显示图片


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

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

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

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

import matplotlib.patches as mpatches#导入用于生成图例的库

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

 

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

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

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

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

 

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

colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']#颜色列表

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

 

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

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

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

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

            ax.pie(sheet['数量'], explode=None, labels=None, colors='w',

     autopct='%d', shadow=False, startangle=90,radius=1/2,center=(i, j),frame=True,textprops={'fontsize':8})#绘制散饼图

           ax.pie(sheet['数量'], explode=None, labels=None, colors=colors,

     autopct=None, shadow= False, startangle=90,radius=r/max(sheet1.max())/2,center=(i,j),frame=True)

       else:

            ax.pie(sheet['数量'], explode=None, labels=None, colors=colors,

     autopct='%d', shadow=False, startangle=90,radius=r/max(sheet1.max())/2,center=(i,j),frame=True,textprops={'fontsize':8})#绘制散饼图,面积大小由radius调节。

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

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

                horizontalalignment='center',verticalalignment='center',color='red')#增加数据标签,字体大小由fontsize调节

     

plt.grid(True)#增加栅格  

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

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

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

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

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

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

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

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

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

plt.show() #显示图片


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

相关链接:

作图详解 | 利用Python绘制技术功效图的方法


保护版权人人有责

小编心血,拒绝盗图,如需转载,后台联系


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/wLsPchXG79
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/4396
 
1212 次点击