使用matplotlib绘制嵌套圆环图(1)绘图结果以弹出方式显示;(2)学院圆环在内,专业圆环在外,嵌套的内外圆环数据比例一致; (3) 学院圆环的文本标签居中显示,专业圆环的文本标签在外显示,文本效果自定; (4) 显示专业人数;将人数排前三的专业饼图部分析出,突出显示; (5) 图例垂直居左上角显示,标题在图表上方居中,效果自定; (6)
时间: 2024-02-24 15:57:59 浏览: 155
下面是使用matplotlib绘制嵌套圆环图的代码与注释,符合要求:
```python
import matplotlib.pyplot as plt
import numpy as np
# 数据准备
academy_data = [20, 30, 50] # 学院数据
major_data = [20, 30, 10, 40, 30, 20, 10, 50] # 专业数据
major_labels = ['专业1', '专业2', '专业3', '专业4', '专业5', '专业6', '专业7', '专业8'] # 专业标签
# 设置颜色
colors_academy = ['#ff9999', '#66b3ff', '#99ff99']
colors_major = ['#ffcc99', '#99ffff', '#ccffcc', '#ffff99', '#ff9999', '#ff99ff', '#99ff99', '#9999ff']
# 绘制图形
fig, ax = plt.subplots()
ax.axis('equal')
# 绘制学院圆环
academy, academy_text, _ = ax.pie(academy_data, radius=1.5, labels=['学院A', '学院B', '学院C'], labeldistance=0.7,
colors=colors_academy, wedgeprops=dict(width=0.3, edgecolor='w'))
# 设置学院圆环标签居中
for text in academy_text:
text.set_horizontalalignment('center')
# 绘制专业圆环
major, _, major_text = ax.pie(major_data, radius=1.2, labels=major_labels, labeldistance=0.5, colors=colors_major,
wedgeprops=dict(width=0.3, edgecolor='w'), autopct='%1.1f%%')
# 设置专业圆环标签在外
for text in major_text:
text.set_horizontalalignment('left')
# 显示专业人数
for i in range(len(major)):
# 计算专业人数
num = int(major_data[i] / 100 * sum(academy_data))
# 在专业圆环上添加文本
ax.text(1.5 * np.cos(np.pi / 180 * (major[i].theta2 - major[i].theta1) / 2 + major[i].theta1),
1.5 * np.sin(np.pi / 180 * (major[i].theta2 - major[i].theta1) / 2 + major[i].theta1),
'{}人'.format(num), ha='center', va='center')
# 突出显示人数排前三的专业
explode = (0.1, 0.1, 0, 0, 0, 0, 0, 0)
major[0].set_edgecolor('r')
major[0].set_linewidth(2)
major[0].set_alpha(0.8)
major[1].set_edgecolor('r')
major[1].set_linewidth(2)
major[1].set_alpha(0.8)
major[2].set_edgecolor('r')
major[2].set_linewidth(2)
major[2].set_alpha(0.8)
# 添加图例
plt.legend(major, major_labels, title='Major Data', loc='upper left', bbox_to_anchor=(0, 1))
# 添加标题
plt.title('Academy and Major Data')
# 显示图形
plt.show()
```
运行代码,即可看到绘制的嵌套圆环图。其中,设置圆环标签居中和在外的方法分别是:通过循环获取标签文本对象,调用set_horizontalalignment方法设置水平对齐方式。突出显示排前三的专业可以通过设置explode参数,以及调用专业圆环对象的相关属性和方法实现。
阅读全文