梁先国SEO专注网站优化,让您网站更具价值!

当前位置:首页 > WEB前端学习 > 如何利用Python将气泡矩阵图中的“气泡”变成饼图或环图

如何利用Python将气泡矩阵图中的“气泡”变成饼图或环图

时间:2018-08-10 12:30 来源:重庆网站制作公司(www.seozol.cn) 作者:重庆网站建设公司

上一篇我们利用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或者绿色向右的小箭头。
 
 保存,单击F5或者绿色向右的小箭头
 
得到如下效果:
 
Python绘制矩阵气泡饼图效果
 
 
Python绘制矩阵气泡饼图效果
 
 
 
Python绘制矩阵气泡饼图
 
中心红色数据为该环的数据量总和,三个黑色数据为不同部分的数据量:
 
 
 
Python绘制矩阵气泡饼图
 
 
是不是很简单呢~
 
 
 
 
“矩阵气泡饼图”程序及说明如下:
 
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将气泡矩阵图中的“气泡”变成饼图或环图 由重庆网站制作公司(www.seozol.cn)原创内容,如需要转载请注明原文网址:重庆网站建设公司http://www.seozol.cn/

 
喜欢看,就分享到:

围观: 9999次 | 责任编辑:重庆网站建设公司

推荐文章

热门文章

最新文章

回到顶部