1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python—matplotlib 散点图 气泡图 气泡饼图/功效矩阵可视化对比

python—matplotlib 散点图 气泡图 气泡饼图/功效矩阵可视化对比

时间:2021-08-14 06:46:16

相关推荐

python—matplotlib 散点图 气泡图 气泡饼图/功效矩阵可视化对比

python—matplotlib 散点图,气泡图,气泡饼图/功效矩阵可视化对比

刚入行,一直在看大神们的发帖学习,想着自己也写点什么东西,找了好久没找到气泡饼图相关的内容(可能是我眼神不好),于是打算写个matplotlib绘制散点图,气泡图和气泡饼图对比。仅供娱乐。

散点图,气泡图相信大多数都了解,都是基础图表,而气泡饼图则是在气泡图的基础上增加一个维度,用饼图代替气泡的显示,简单来说散点图是一维图表,气泡图是二维图表,气泡饼图是三维图表。个人认为任务的难点在于数据的处理,而效果在于可视化展示,接下来一步步介绍具体内容。

首先是图表类型,不难看出其涉及到的主要是:

饼图参数:matplotlib.pyplot.pie

(

x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,textprops=None,center(0,0),frame=False,rotatelabels=False,hold=None,dataNone

)

散点图参数:matplotlib.pyplot.scatter

(

x,y,s=None,C=None,marker=None,cmap=None,norm=Nonevmin=None,vsax=None,alpha=Norne,linewidths=None,verts=None,edgecolors=None,data-None, **kwargs

)

这里就不过多解释了,好多大神那里都有详尽的讲解。

示例:相同数据源下绘制散点图,气泡图,气泡饼图

数据表:由真实数据更改公开号和发明人名字所得。列举了前19条。

第三方模块:

import numpy as np # 导入python的数值计算扩展包numpy,并重命名为npimport matplotlib.pyplot as plt # 导入Python的绘图扩展包matplotlib,并重新命名为pltimport pandas as pd # 导入python的数据处理扩展包pandas,并重命名为pd,该包用于读写excel文件import matplotlib.patches as mpatchesfrom pylab import mpl

一.散点图。

源代码展示:

df = pd.read_excel(r'E:\软件下载\气泡饼图数据.xlsx')df1 = df[['第一发明人', '申请年', '公开(公告)号']] #提取字段,在原数据字段过多时使用df1 = df1.groupby(['申请年', '第一发明人'], as_index=False).count() # 分组计数df1 = df1.sort_values(by='公开(公告)号', ascending=False) # 排序df1.columns = ['申请年', '第一发明人', '申请数量'] #更改字段名,主要是更改用于排序的字段名plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.2) #设置画布尺寸color = np.random.rand(len(df1['申请数量'])) #按照dataframe数量随机生成颜色列表plt.scatter(df1['申请年'], df1['申请数量'],s=20) #X轴,Y轴数据,标记点的尺寸plt.xlabel('申请年份') #X轴名称plt.ylabel('申请数量') #Y轴名称plt.xticks(df1['申请年'], df1['申请年'],rotation=15) #X轴刻度与标签配置plt.show() #展示图表

可视化展示:

二.气泡图。

源代码展示:

df = pd.read_excel(r'E:\软件下载\气泡饼图数据.xlsx')df1 = df[['第一发明人', '申请年', '公开(公告)号']]df1 = df1.groupby(['申请年', '第一发明人'], as_index=False).count()df1 = df1.sort_values(by='公开(公告)号', ascending=False)df1.columns = ['申请年', '第一发明人', '申请数量']plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.15)color = np.random.rand(len(df1['申请数量']))plt.scatter(df1['申请年'], df1['第一发明人'], df1['申请数量']*20)# df1['申请数量']*20 为尺寸列表,控制气泡的大小,*20是为了突出显示,无实际意义。其他与饼图一致不多赘述。plt.xlabel('申请年份')plt.ylabel('第一发明人')plt.xticks(df1['申请年'], df1['申请年'],rotation=15)plt.show()

可视化展示:

三.气泡饼图。

源代码展示:

df = pd.read_excel(r'E:\软件下载\气泡饼图数据.xlsx')# x轴 Y轴 饼图分类 计数 字段df1= df[['申请年','第一发明人','法律状态','公开(公告)号']]#获取 三个维度的字段列表 以便绘图使用dfs=df1.groupby('申请年',as_index=False)['公开(公告)号'].count()dfz=df1.groupby('法律状态',as_index=False)['公开(公告)号'].count()dfj=df1.groupby('第一发明人',as_index=False)['公开(公告)号'].count()listz=list(dfz['法律状态'])lists=list(dfs['申请年'])listj=list(dfj['第一发明人'])# x轴 Y轴df1=df1.groupby(['申请年','第一发明人'],as_index=False)['公开(公告)号'].count()df1=df1.sort_values(by='申请年',ascending=True)df2= df1.pivot_table(columns='申请年',index='第一发明人', values='公开(公告)号', aggfunc=np.sum, fill_value=0) #数据透视 df_1=df[['申请年','第一发明人','法律状态','公开(公告)号']]df_1=df_1.groupby(['申请年','第一发明人','法律状态'],as_index=False)['公开(公告)号'].count()df_2= df_1.pivot_table(index=['第一发明人','申请年'], values='公开(公告)号', columns='法律状态', aggfunc=np.sum, fill_value=0) #数据透视 with pd.ExcelWriter(r"E:\软件下载\功效矩阵过渡.xlsx")as writer:df2.to_excel(writer, sheet_name='工作表1')df_2.to_excel(writer,sheet_name='工作表2')# 将处理好的数据写入execl表,方便查看df2 = pd.read_excel(r'E:\软件下载\功效矩阵过渡.xlsx','工作表1')df_2 = pd.read_excel(r'E:\软件下载\功效矩阵过渡.xlsx','工作表2')df_2=df_2.fillna(method='ffill') #对数据透视表填充空值,用前一个值填充。df_3=df_2.iloc[:,2:] # 切片获取第二列到最后一列的数据df_3=df_3.T # 数组转置m=0df2=df2.iloc[:,1:] x = [i+1 for i in range(len(df2.columns))] # 获取数据表的列,作为x轴辅助绘图数据y_index = [i for i in range(len(df2.index))] # 获取纵轴有多少行y = [[i for y_data in range(len(x))] for i in range(1, len(y_index)+1)] # 生成y轴辅助数据# 与df_3 形成对应关系fig, ax = plt.subplots() # 创建子图colors = ['#FABB27', '#43B74B','#1976D2', '#CDCE12'] # 颜色列表ax.set(aspect='equal') # 设置图形的对称,不然饼会椭圆##饼图显示数值 数据过于杂乱,如有需要自行配置。# def absolute_value(val):#a = np.round(val/100.*lt.sum(), 0)#return afor index in range(len(y_index)): # 对转置后的每一列进行循环 #每次找一列数据 某人 某年 各法律状态 画饼图print('index=',index)for i, j, r in zip(x, y[index], df2.T[df2.index[index]]): # 循环执行,每次从x,y[index]中读取一个数,从转置后的excel表格中读取一列中的一个数据if r != 0 : lt = df_3[m] #每次取一列 绘制饼图lt.columns = ['数量']ax.pie(lt, colors=colors,startangle=90, radius=r / max(df2.max()) / 2, center=(i, j), frame=True)#radius控制大小 饼图半径 取最值除以2 以避免饼图重叠, center控制位置中心点坐标m = m + 1plt.grid( ls = '-.',lw = 0.35) # 增加栅格plt.xlabel('申请年', size=14) # x轴说明plt.ylabel('第一发明人', size=14) # y轴说明# plt.title('气泡饼图', size=14) # 图片名称plt.subplots_adjust(left=0.1,right=0.9,top=0.9,bottom=0.15)plt.xticks(x, lists,rotation=15) # 更新x轴标度plt.yticks([i+1 for i in range(len(df2.index))], listj) # 更新y轴标度plt.xlim(0, len(df2.columns)+1) # 设置x轴范围,美化图表plt.ylim(0, len(df2.index)+1) # 设置y轴范围,美化图表plt.legend(handles=[mpatches.Patch(color=colors[i], label=(lt.index[i])) for i in range(len(lt.index))], loc='upper left',bbox_to_anchor=(1,1))#配置图例plt.show() # 显示图片

过渡表格数据:

可视化展示:

以上便是本篇全部内容。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。