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

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


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中画饼图的方法,其主要参数如下:


640.png


1.2 基础作图


labels = 'Python组', 'Java组', 'C组', 'Go组'
sizes = [25, 45, 30, 10]
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()

640.png


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()

640.png



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()

640.png


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()

640.png


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()


640.png


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个返回值:[<matplotlib.patches.Wedge object at 0x7efe1de27450>, <matplotlib.patches.Wedge object at 0x7efe1de27a50>, <matplotlib.patches.Wedge object at 0x7efe1de311d0>, <matplotlib.patches.Wedge object at 0x7efe1de31a90>]
第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%')]

640.png

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()

640.png

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()


640.png

2 箱线图


2.1 参数说明


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


640.png


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()


640.png


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()

640.png


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()

640.png


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,下面的设置才会生效
box_dict.get('boxes')[0].set_color('red')  # 箱体边框颜色
box_dict.get('boxes')[1].set_color('blue')
box_dict.get('boxes')[2].set_color('green')
plt.show()

640.png

相关文章
|
3月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
60 1
|
1月前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
2月前
|
数据可视化 Python
Matplotlib 教程 之 Matplotlib 饼图 5
使用 Matplotlib 的 `pie()` 方法绘制饼图,通过参数设置(如颜色、标签和比例等),轻松展示各类别占比。示例代码展示了如何创建一个具有突出部分的彩色饼图并显示百分比。`pie()` 方法支持多种参数定制,包括阴影、旋转角度及文本属性等。
50 3
|
2月前
|
数据可视化 Python
Matplotlib 教程 之 Matplotlib 饼图 4
使用 Matplotlib 的 `pie()` 方法绘制饼图,展示各部分占比。`pie()` 方法可通过多个参数定制图表样式,如颜色、标签和百分比显示格式等。通过实例演示了如何突出显示特定扇区并格式化百分比输出。
29 4
|
2月前
|
搜索推荐 Python
Matplotlib饼图实例
Matplotlib饼图实例
30 4
|
2月前
|
数据可视化 Python
Matplotlib 教程 之 Matplotlib 饼图 1
使用 Matplotlib 库中的 `pyplot` 模块 `pie()` 方法来绘制饼图,并详细解释了 `pie()` 方法的参数,包括数据输入 `x`、扇区间距 `explode`、标签 `labels`、颜色 `colors`、百分比格式 `autopct`、标签距离 `labeldistance`、阴影 `shadow`、半径 `radius`、起始角度 `startangle`、逆时针方向 `counterclock`、扇形属性 `wedgeprops`、文本标签属性 `textprops`、饼图中心位置 `center`
34 1
|
2月前
|
数据可视化 数据挖掘 API
Python中的数据可视化利器:Matplotlib与Seaborn对比解析
在Python数据科学领域,数据可视化是一个重要环节。它不仅帮助我们理解数据,更能够让我们洞察数据背后的故事。本文将深入探讨两种广泛使用的数据可视化库——Matplotlib与Seaborn,通过对比它们的特点、优劣势以及适用场景,为读者提供一个清晰的选择指南。无论是初学者还是有经验的开发者,都能从中找到有价值的信息,提升自己的数据可视化技能。
144 3
|
2月前
|
数据可视化 定位技术 Python
Python数据可视化--Matplotlib--入门
Python数据可视化--Matplotlib--入门
31 0
|
3月前
|
数据可视化 数据挖掘 开发者
数据可视化新纪元!Python + Matplotlib + Seaborn,让你的数据故事生动起来!
在这个数据可视化的新纪元,让我们充分发挥 Python 的优势,用精彩的图表讲述数据背后的故事,为决策提供有力的支持,为交流带来清晰的视角。
36 4
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
57 2