网易首页 > 网易号 > 正文 申请入驻

Matplotlib数据可视化:饼图与箱线图

0
分享至

from matplotlib import pyplot as plt
import numpy as np
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体支持
1 饼图-pie() 1.1 pie()方法参数说明

pie()是matplotlib中画饼图的方法,其主要参数如下:

fig = plt.figure(figsize=(8, 4))
ax1 = fig.add_subplot(111)

ax1.pie(sizes, labels=labels)
ax1.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.

plt.show()

1.3 字符标签与数值标签labels = 'Python组', 'Java组', 'C组', 'Go组'
sizes = [25, 45, 30, 10]

fig = plt.figure(figsize=(8, 4))

ax1 = fig.add_subplot(121)
ax1.pie(sizes,
labels=labels, # 字符标签
labeldistance=1.1, # 字符标签到中心点的距离
autopct='%1.1f%%', # 显示数值标签
pctdistance=0.5 #数值标签到中心点的距离
)

ax2 = fig.add_subplot(122)
ax2.pie(sizes,
labels=labels, # 字符标签
labeldistance=0.4, # 字符标签到中心点的距离
autopct='%1.2f%%', # 显示数值标签
pctdistance=1.2, #数值标签到中心点的距离
rotatelabels=True # 旋转标签
)
plt.show()

1.4 扇形分隔距离labels = 'Python组', 'Java组', 'C组', 'Go组'
sizes = [25, 45, 30, 10]


fig = plt.figure(figsize=(8, 4))


explode1 = (0.1, 0.1, 0.1, 0.1)
ax1 = fig.add_subplot(121)
ax1.pie(sizes, explode=explode1, # 分隔扇形
labels=labels, autopct='%1.1f%%')

explode2 = (0.1, 0, 0, 0)
ax2 = fig.add_subplot(122)
ax2.pie(sizes, explode=explode2, # 分隔扇形
labels=labels, autopct='%1.1f%%')
plt.show()

1.5 阴影与边框labels = 'Python组', 'Java组', 'C组', 'Go组'
sizes = [25, 45, 30, 10]
explode = (0.1, 0, 0, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, # 显示阴影
wedgeprops = {'linewidth': 3} # 设置边框宽度
)
plt.show()

1.6 旋转图形labels = 'Python组', 'Java组', 'C组', 'Go组'
sizes = [25, 45, 30, 10]
explode = (0.1, 0, 0, 0)

fig1, ax1 = plt.subplots()
ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True,
startangle=90 # 旋转
)
plt.show()

1.7 单独设置某一扇形

pie()方法返回一个tuple,第一个元素为每个扇形对象组成的list,第二个元素为每个扇形的标签Text对象,第三个元素为每个扇形的数值标签对象,通过这三个对象,可以实现对单一扇形的设置。

labels = 'Python组', 'Java组', 'C组', 'Go组'
sizes = [25, 45, 30, 10]
explode = (0.1, 0, 0, 0)

fig1, ax1 = plt.subplots()
patches, texts, autotexts = ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%')

print('第1个返回值:',patches)
print('第2个返回值:',texts)
print('第3个返回值:',autotexts)

texts[0].set_color('red') # 设置第一个扇形的字符标签字体颜色
texts[0].set_fontsize(30) # 设置第一个扇形的字符标签字体大小
autotexts[0].set_color('white') # 设置第一个扇形的数值标签字体颜色
plt.show()
第1个返回值:[, , , ]
第2个返回值:[Text(0.9068994725035225, 0.7858329000320824, 'Python组'), Text(-1.0005952104475537, 0.4569564802357176, 'Java组'), Text(0.15654637770487598, -1.0888035780743386, 'C组'), Text(1.055442297353649, -0.30990572269135586, 'Go组')]
第3个返回值:[Text(0.5290246922937214, 0.4584025250187147, '22.7%'), Text(-0.5457792056986657, 0.2492489892194823, '40.9%'), Text(0.0853889332935687, -0.593892860767821, '27.3%'), Text(0.5756957985565357, -0.1690394851043759, '9.1%')]
labels = 'Python组', 'Java组', 'C组', 'Go组'
sizes = [25, 45, 30, 10]
explode = (0.1, 0, 0, 0)

fig1, ax1 = plt.subplots(figsize=(5, 5))
patches, texts, autotexts = ax1.pie(sizes, explode=explode, autopct='%1.1f%%')

ax1.legend(patches, labels, loc="upper right",bbox_to_anchor=(0.75, 0, 0.5, 0.4))
plt.show()

1.8 嵌套饼图sizes = {
'Python组':{'男':10, '女': 15},
'Java组':{'男':15, '女': 30},
'C组':{'男':5, '女': 25},
'Go组':{'男':4, '女': 6}
}

def func(sizes):
"""提取数据和标签"""
data1 = []
data2 = []
data2_label = []
for key in sizes.keys():
data1.append(sizes.get(key).get('男') + sizes.get(key).get('女'))
data2.append(sizes.get(key).get('男'))
data2_label.append(key+'-'+'男')
data2.append(sizes.get(key).get('女'))
data2_label.append(key+'-'+'女')
return data1, data2, sizes.keys(), data2_label


data1, data2, data1_label, data2_label = func(sizes)


cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(4)*4)
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10, 13, 14]))

fig = plt.figure(figsize=(10, 4))

ax1 = fig.add_subplot(121)
ax1.pie(data1, labels=data1_label, radius=1.5, colors=outer_colors, autopct='%1.1f%%', labeldistance=1, pctdistance=0.8)
ax1.pie(data2, labels=data2_label, radius=1, colors=inner_colors, autopct='%1.1f%%', labeldistance=0.4, pctdistance=0.9)
ax2 = fig.add_subplot(122)
ax2.pie(data1, labels=data1_label, radius=1.5, colors=outer_colors, autopct='%1.1f%%', labeldistance=1, pctdistance=0.8,wedgeprops=dict(width=0.8, edgecolor='w'))
ax2.pie(data2, labels=data2_label, radius=1, colors=inner_colors, autopct='%1.1f%%', labeldistance=0.4, pctdistance=0.9,wedgeprops=dict(width=0.6, edgecolor='w'))
plt.show()

2 箱线图 2.1 参数说明

matplotlib绘制箱线图通过boxplot()方法实现,主要参数如下:

boxplot()方法返回值是一个dict,键值包括'whiskers'、'caps'、'boxes'、'fliers'、'means',分别表示须线、顶端末端线段、箱体、异常数据、均值等绘图对象分别组成的列表,通过这些对象可以横放把您的实现箱线图各个部分的自定义设置。

2.2 基础作图data=np.random.normal(0,4,100)

fig = plt.figure(figsize=(8, 8))
ax1 = fig.add_subplot(221)
ax1.set_title('图1 常规作图')
ax1.boxplot(data)

muti_data=[np.random.normal(0,std,100) for std in range(1,4)]
ax2 = fig.add_subplot(222)
ax2.set_title('图2 多图绘制')
ax2.boxplot(muti_data)

ax3 = fig.add_subplot(223)
ax3.set_title('图3 水平箱线图')
ax3.boxplot(data, vert=False)

ax4 = fig.add_subplot(224)
ax4.set_title('图4 中间凹陷')
ax4.boxplot(data, notch=True)


plt.show()

2.3 修改标签data=np.random.normal(0,4,100)

fig = plt.figure(figsize=(8, 4))
muti_data=[np.random.normal(0,std,100) for std in range(1,4)]
ax2 = fig.add_subplot(121)
ax2.set_title('图1')
ax2.boxplot(muti_data, labels=['第1组', '第2组', '第3组'])

muti_data=[np.random.normal(0,std,100) for std in range(1,4)]
ax2 = fig.add_subplot(122)
ax2.set_title('图2')
ax2.boxplot(muti_data, vert=False, labels=['第1组', '第2组', '第3组'])

plt.show()

2.4 显示均值data=np.random.normal(0,4,100)

fig = plt.figure(figsize=(8, 4))
muti_data=[np.random.normal(0,std,100) for std in range(1,4)]
ax2 = fig.add_subplot(121)
ax2.set_title('图1')
ax2.boxplot(muti_data, labels=['第1组', '第2组', '第3组'], showmeans=True) # 显示均值,默认以点的方式显示

muti_data=[np.random.normal(0,std,100) for std in range(1,4)]
ax2 = fig.add_subplot(122)
ax2.set_title('图2')
ax2.boxplot(muti_data, labels=['第1组', '第2组', '第3组'], showmeans=True, meanline=True) # 显示均值,并以横线方式显示

plt.show()

2.5 箱体设置data=np.random.normal(0,4,100)

fig = plt.figure(figsize=(8, 4))
muti_data=[np.random.normal(0,std,100) for std in range(1,4)]
ax2 = fig.add_subplot(121)
ax2.set_title('图1')
box_dict = ax2.boxplot(muti_data, labels=['第1组', '第2组', '第3组'], patch_artist=True) # 注意,patch_artist一定要设置为True,下面的设置才会生效

作者:奥辰
Github:https://github.com/ChenHuabin321
https://www.cnblogs.com/chenhuabin

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
恭喜!这对演员夫妇要当爸爸妈妈了!

恭喜!这对演员夫妇要当爸爸妈妈了!

奋斗在韩国
2026-06-18 10:07:36
煮鸡蛋时只需加一点它,鸡蛋不开裂还自动脱壳,吃起来更香更嫩!

煮鸡蛋时只需加一点它,鸡蛋不开裂还自动脱壳,吃起来更香更嫩!

邹小蘑菇
2026-06-20 11:09:34
马思纯疯了?竟然把一堆球衣直接系腰上当裙子穿,没想到效果炸了

马思纯疯了?竟然把一堆球衣直接系腰上当裙子穿,没想到效果炸了

西楼知趣杂谈
2026-06-19 17:34:35
比算命准!这5个日子千万避开,别等出事才后悔

比算命准!这5个日子千万避开,别等出事才后悔

喵咪文化
2026-06-14 12:30:27
27岁南方医科大学研究生李阿鑫确诊肺癌,获奖无数,因关节痛确诊

27岁南方医科大学研究生李阿鑫确诊肺癌,获奖无数,因关节痛确诊

不写散文诗
2026-06-17 19:13:59
拜登出席奥巴马总统中心揭幕呆滞出糗,拜登夫人难辞其咎

拜登出席奥巴马总统中心揭幕呆滞出糗,拜登夫人难辞其咎

移光幻影
2026-06-20 16:28:28
从“养不起卖不掉”到全国70%份额:河南鹦鹉及背后25亿元产业链

从“养不起卖不掉”到全国70%份额:河南鹦鹉及背后25亿元产业链

白浅娱乐聊
2026-06-20 02:27:01
江西挖出50万吨“垃圾”一化验,3300年前中国已把西方甩了2000年

江西挖出50万吨“垃圾”一化验,3300年前中国已把西方甩了2000年

掠影后有感
2026-06-19 09:55:37
杨坤重返《歌手》首场淘汰!哽咽表示:为什么不让我留下多唱几首

杨坤重返《歌手》首场淘汰!哽咽表示:为什么不让我留下多唱几首

韩小娱
2026-06-20 17:00:27
独家:中国船舶集团原副总盛纪纲与董事长温刚、副总杜刚并称为“中船三刚”!两任领导都对他不错

独家:中国船舶集团原副总盛纪纲与董事长温刚、副总杜刚并称为“中船三刚”!两任领导都对他不错

新浪财经
2026-06-19 22:17:47
革命卫队都说特朗普已经低头,9千万伊朗人眼前,只剩下一片废墟

革命卫队都说特朗普已经低头,9千万伊朗人眼前,只剩下一片废墟

壹切的壹切
2026-06-20 17:06:24
日媒:中国方面似乎在慢慢重启赴日团体旅游项目

日媒:中国方面似乎在慢慢重启赴日团体旅游项目

随波荡漾的漂流瓶
2026-06-19 17:09:56
全球离婚率排名,中国排第11名!

全球离婚率排名,中国排第11名!

美剧组|人人影视
2026-06-11 22:47:28
演员必须用原名了!杨紫白鹿还好,王星越笑喷:这谁找得到

演员必须用原名了!杨紫白鹿还好,王星越笑喷:这谁找得到

吃瓜蒙主
2026-06-19 00:30:03
开国少将到空军司令部开会,却被刘亚楼一把攥住:今后你别学飞了

开国少将到空军司令部开会,却被刘亚楼一把攥住:今后你别学飞了

大运河时空
2026-06-19 17:15:05
河南农村小伙娶美国女博士,婚后21年不工作,直言:这软饭吃定了

河南农村小伙娶美国女博士,婚后21年不工作,直言:这软饭吃定了

情感艺术家
2026-06-12 21:10:32
近70万海归挤回国,海归硕士求职被一句“我们不承认”给堵了回去

近70万海归挤回国,海归硕士求职被一句“我们不承认”给堵了回去

小叨娱乐
2026-06-04 11:26:37
特朗普G7峰会再揭日本伤疤,高市早苗当场炸毛!

特朗普G7峰会再揭日本伤疤,高市早苗当场炸毛!

燕梳楼频道
2026-06-20 21:51:08
布达拉宫地下世界复杂得吓人!
金碧辉煌下藏着1200多个“地垄”

布达拉宫地下世界复杂得吓人! 金碧辉煌下藏着1200多个“地垄”

西楼知趣杂谈
2026-06-12 08:54:44
全国游泳冠军赛:覃海洋退赛+张雨霏第2晋级,孙杨800自慢组第五

全国游泳冠军赛:覃海洋退赛+张雨霏第2晋级,孙杨800自慢组第五

乒烧泳球
2026-06-20 13:07:51
2026-06-20 22:39:00
Ai学习的老章 incentive-icons
Ai学习的老章
Ai学习的老章
3436文章数 11166关注度
往期回顾 全部

科技要闻

DeepSeek上线识图模式,看谁都像梁文锋

头条要闻

媒体:以色列猛攻一轮接一轮 万斯强硬警告并发出暗示

头条要闻

媒体:以色列猛攻一轮接一轮 万斯强硬警告并发出暗示

体育要闻

全队抱头痛哭!5亿欧土耳其出局 2场轰62脚0进球

娱乐要闻

张凯丽被骂到关评!

财经要闻

金饰克价年内大跌近450元 跌幅最高达26%

汽车要闻

惊出冷汗!重庆实测奥迪A5L,华为智驾这波操作绝了…

态度原创

亲子
家居
数码
艺术
游戏

亲子要闻

一胎是腭裂,二胎是唇腭裂概率大吗?

家居要闻

绿意盎然 自然之境

数码要闻

微星发布25L紧凑游戏整机MAG Infinite Z 8B:搭载锐龙7 9700X+RTX 5070 Ti

艺术要闻

9个中国建筑获“2026 RIBA国际卓越奖”

GTA6封面女郎被爆改成蒂法!细腰肥臀身材顶级

无障碍浏览 进入关怀版