Python Matplotlib绘制双层饼图与环形图实战指南

Mia
Mia
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍如何使用Python的Matplotlib库绘制双层饼图和环形图。通过在同一画布中嵌套不同半径的饼图,并调整radius、pctdistance及legend参数,实现美观的多层数据展示。文章提供完整代码示例及关键参数解析,帮助开发者快速掌握复杂饼图的绘制技巧。

(1)

饼图(pie)是一种将圆形分割为若干扇区以展示各数据系列占比的图表,也是日常数据分析中最常见的可视化形式之一。

在Python中,通常使用matplotlib库的pie函数进行绘制。以下是基于Python 3.X版本的基本命令示例:

vals = [1, 2, 3, 4]#创建数据系列
fig, ax = plt.subplots()#创建子图
labels = 'A', 'B', 'C', 'D'
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
explode = (0, 0.1, 0, 0)
ax.pie(vals, explode=explode, labels=labels, colors=colors,
 autopct='%1.1f%%', shadow=True, startangle=90,radius=1.2)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')#设置标题以及图形的对称
plt.show()

上图展示了经过颜色、标签、百分比、标题、起始角度、半径以及部分扇区突出(explode)等参数设置后的最终效果。这些设置主要通过在pie()函数内部指定参数实现,具体调用方式如下:

pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,
shadow=False, labeldistance=1.1, startangle=None, radius=None)

关于该函数内部各参数的具体含义,网络上已有大量资料可供参考,此处不再赘述。读者可根据实际需求反复尝试,以优化图形的美观度。

(2)

目前Matplotlib官方文档中尚未提供双层饼图的专门教程,但我们注意到pie()函数包含一个半径设置参数——radius。基于此,我们可以尝试在同一个Figure对象中绘制两个不同半径的饼图,从而形成嵌套结构,实现双层饼图的效果。示例如下:

生成的图形如下所示:

vals1 = [1, 2, 3, 4]
vals2 = [2, 3, 4, 5]
fig, ax = plt.subplots()
labels = 'A', 'B', 'C', 'D'
ax.pie(vals1, radius=1.2)
ax.pie(vals2, radius=1)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
plt.show()

初步尝试成功,令人信心大增! 因此,在Matplotlib中绘制双层饼图的核心方法可以总结为:基于不同的数据系列分别构建两个饼图,通过嵌套方式组合,并对每个饼图的pie()函数中的radius参数进行差异化设置,即可生成双层饼图。

(3)

然而,观察上述图形会发现其细节尚显粗糙,我们可以进一步添加百分比标签、颜色区分等元素,并进行更精细的参数设置:

vals1 = [1, 2, 3, 4]
vals2 = [2, 3, 4, 5]
fig, ax = plt.subplots()
labels = 'A', 'B', 'C', 'D'
ax.pie(vals1, radius=1.2,autopct='%1.1f%%',pctdistance=0.9)
ax.pie(vals2, radius=1,autopct='%1.2f%%',pctdistance=0.5)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
#plt.legend()
plt.legend(labels,bbox_to_anchor=(1.05, 1), loc='best', borderaxespad=0.)
plt.show()

为保持示例简洁,此处未对颜色和角度进行额外参数设置。若读者感兴趣,后续可加入更多参数进行个性化调整。这里主要说明以下关键点:

1、图中各扇区的百分比数据,需通过分别设置每个饼图的pctdistance(百分比文本离圆心的距离)参数来实现视觉区分,这一过程经过多次调试确定;

2、对于各扇区颜色所代表的数据系列标签,采用plt.legend()函数生成图例并置于右侧,以避免饼图内部文本过多影响整体视觉效果;

3、legend()函数的图例位置可通过关键字参数loc指定,而bbox_to_anchor关键字允许用户手动控制图例的具体布局。例如,若希望将轴域图例置于图像右上角而非默认的轴域边角,只需指定目标位置及其对应的坐标系即可。

(4)

在此基础上,进一步思考:是否可以在双层饼图的基础上绘制双层环形图?

解决思路如下:在两个嵌套饼图内部再添加一个中心小圆形图,并将其背景色设置为白色。经过实践,结果符合预期:

vals1 = [1, 2, 3, 4]
vals2 = [2, 3, 4, 5]
vals3=[1]
fig, ax = plt.subplots()
labels = 'A', 'B', 'C', 'D'
ax.pie(vals1, radius=1.2,autopct='%1.1f%%',pctdistance=0.9)
ax.pie(vals2, radius=1,autopct='%1.1f%%',pctdistance=0.75)
ax.pie(vals3, radius=0.6,colors='w')
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
#plt.legend()
plt.legend(labels,bbox_to_anchor=(1, 1), loc='best', borderaxespad=0.)
plt.show()

其实现原理为:绘制三个嵌套的饼图,其中最内层的饼图设置较小的半径,且仅包含一个变量(因此不会被分割),同时将背景色设置为白色(colors='w')。至此,双层环形图绘制完成!

实际上,该方法可进一步延伸,用于绘制多层饼图或多层环形图。其核心原理均一致:绘制具有不同半径的pie,并配置相应的参数即可。

总结

以上即为本文关于Python通过Matplotlib绘制双层饼图及环形图的简单示例全部内容,希望能对大家有所帮助。感兴趣的朋友可继续查阅本站其他相关专题,如有不足之处,欢迎留言指正。感谢各位对本站的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表