Matplotlib绘制漂亮的饼状图|python绘制漂亮的饼状图

python绘图系列文章目录

往期python绘图合集:
python绘制简单的折线图
python读取excel中数据并绘制多子图多组图在一张画布上
python绘制带误差棒的柱状图
python绘制多子图并单独显示
python读取excel数据并绘制多y轴图像
python绘制柱状图并美化|不同颜色填充柱子
python随机生成数据并用双y轴绘制两条带误差棒的折线图
Python绘制带误差棒的柱状图渐变色填充含数据标注(进阶)
python绘制散点图|散点大小和颜色深浅由数值决定



饼状图是数据可视化中常见的一种类型,能够直观地表示各类别在总体中所占的比例。Matplotlib 是 Python 中常用的数据可视化库,提供了丰富的绘图工具和函数,包括绘制饼状图的方法。

本文将介绍如何使用 Matplotlib 绘制复杂的饼状图,包含多个子图以及两个坐标轴。我们将结合实例代码进行讲解,帮助读者快速掌握饼状图的绘制方法和技巧。

1、 安装和导入 Matplotlib

# 使用 pip 安装 Matplotlib
pip install matplotlib
# 使用 conda 安装 Matplotlib
conda install matplotlib

安装完成后,可以在 Python 中导入 Matplotlib 库,通常使用以下方式:

import matplotlib.pyplot as plt

2、 绘制简单的饼状图

为了更好地理解和掌握饼状图的基本绘制方法,我们先来看一个简单的例子。假设有四种动物,它们分别是青蛙、猪、狗和木头,它们分别占据了总动物数量的 15%、30%、45% 和 10%。我们可以使用 Matplotlib 来绘制这个饼状图,并将它们按逆时针顺序从大到小排列。代码如下:

import matplotlib.pyplot as plt

# 各类别的标签和比例
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
sizes = [15, 30, 45, 10]

# 饼状图中各部分的颜色
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
# 绘制饼状图
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
# 显示图形
plt.show()

在上述代码中,我们首先定义了四个动物种类的标签和比例变量,分别存放了它们的名称和所占比例。然后,我们定义了饼状图中各部分的颜色,用于美化图形。最后,使用 plt.pie() 方法绘制了饼状图,并传递了各种参数,如标签、颜色、百分比格式和起始角度。最后,运行 plt.show() 显示图形。绘制完成后,我们将得到一个简单的饼状图。
在这里插入图片描述

3、 绘制复杂的饼状图

在实际情况中,我们可能需要绘制更加复杂和详细的饼状图,以更好地展示数据。下面,我们将介绍如何使用 Matplotlib 绘制一个包含多个子图和坐标轴的复杂饼状图。

3.1 准备工作

首先,我们需要导入一些必要的库和模块:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

其中,NumPy 是 Python 中处理数值计算的常用库,Matplotlib 则是绘制图形的核心库。此外,我们还导入了 FontProperties 类,用于设置字体属性。

接下来,我们定义一些变量,用于存储饼状图中各部分的标签、比例和颜色。代码如下:

扫描二维码关注公众号,回复: 16689372 查看本文章
# 饼状图中各部分的标签、比例和颜色
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
sizes = [15, 30, 45, 10]
colors = ['yellowgreen', 'gold', '#FF0000', 'lightcoral']

4 、绘制子图和设置坐标轴

为了绘制复杂的饼状图,我们需要使用 plt.subplots() 方法创建多个子图,并在每个子图上绘制不同的饼状图。同时,我们还需要设置两个坐标轴,以便更好地展示数据。代码如下:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.font_manager import FontProperties
# The slices will be ordered and plotted counter - clockwise . 
labels =' Frogs ',' Hogs ',' Dogs ',' Logs '
sizes =[15,30,45,10]

colors =['yellowgreen','gold','#FF0000','lightcoral'] 

explode =(0,0.15,0,0.2)
#使饼状图中第2片和第4片裂开
fig = plt.figure(dpi=300) 

font = FontProperties(fname=r"c:\windows\fonts\times.ttf", size=12)

ax = fig.gca ()

ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={
    
    'fontproperties': font},
autopct ='%1.1f%%', shadow = True , startangle =90, radius =0.8, center =(1,1), frame = True,)
ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={
    
    'fontproperties': font},
autopct ='%1.1f%%', shadow = True , startangle =90, radius =0.8, center =(-1,1), frame = True )
ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={
    
    'fontproperties': font},
autopct ='%1.lf%%', shadow = True , startangle =90, radius =0.8, center =(-1,-1), frame = True )
ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={
    
    'fontproperties': font},
autopct ='%1.1f%%', shadow = True , startangle =90, radius =0.8, center =(1,-1), frame = True )

ax.set_xticks ([-1,1])
ax.set_yticks ([-1,1])
ax.set_xticklabels ([" Sunny "," Cloudy "],fontname='Times New Roman',fontsize=14)#设置坐标轴刻度上显示的标签 
ax.set_yticklabels ([" Dry "," Rainy "],fontname='Times New Roman',fontsize=14)
ax.set_xlim ((-2.5,2.5))
ax.set_ylim ((-2.5,2.5))
# Set aspect ratio to be equal so that pie is drawn as a circle . ax . set _ aspect (' equal ')

for tick in ax.get_xticklabels():
    tick.set_fontname("Times New Roman")
for tick in ax.get_yticklabels():
    tick.set_fontname("Times New Roman")
# #设置坐标轴刻度

# #设置坐标轴跨度
plt.tight_layout()
plt.savefig('.jpg')

4.1 运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_58857684/article/details/130774444