IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python—matplotlib 散点图,气泡图,气泡饼图/功效矩阵可视化对比 -> 正文阅读

[Python知识库]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条。

公开(公告)号第一发明人申请年法律状态
a1张三2010有效
a2张三2010有效
a3李四2010有效
a4李四2010有效
a5张三2011有效
a6张三2011有效
a7张三2011有效
a8张三2011有效
a9王五2011有效
a10王五2011有效
a11王五2011失效
a12张三2012有效
a13张三2012有效
a14张三2012有效
a15张三2012有效
a16张三2012有效
a17王五2012有效
a18王五2012有效
a19王五2012有效
a20王五2012有效

第三方模块:

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
from 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=0
df2=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 a
for 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 + 1
plt.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()  # 显示图片

过渡表格数据:

第一发明人201020112012201320142015201620172018201920202021
吴十000000185224
周九000151411100
孙八000231215842
张三24510211121122017113
李四2001123210202
样二000000161210
王五0391046444320
赵六001045335251
郑一000000931130
钱七001321110112
第一发明人申请年失效审中有效
吴十2016001
2017404
2018203
2019011
2020011
2021040
周九2013001
2014005
2015001
2016004
2017001
2018001
2019001
孙八2013002
2014003
2015001
2016002
2017001
2018005
2019044
2020022
2021020

可视化展示:

?以上便是本篇全部内容。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:10:10  更:2022-09-13 11:11:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:45:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码