men_means = (85.5,91.0,72.0,59.0,66.0,55.0) women_means = (94.0,82.0,89.5,62.0,49.0,53.0)绘制堆积柱形图。堆积柱形图的x轴为学科,y轴为平均成绩
时间: 2023-10-21 22:06:19 浏览: 44
以下是使用matplotlib库绘制堆积柱形图的代码:
```python
import matplotlib.pyplot as plt
import numpy as np
# 数据
men_means = (85.5, 91.0, 72.0, 59.0, 66.0, 55.0)
women_means = (94.0, 82.0, 89.5, 62.0, 49.0, 53.0)
subjects = ('Math', 'English', 'History', 'Science', 'Art', 'Music')
# 绘图
fig, ax = plt.subplots()
ax.bar(subjects, men_means, label='Men')
ax.bar(subjects, women_means, bottom=men_means, label='Women')
# 图例
ax.legend()
# 标题和轴标签
ax.set_title('Average scores by subject and gender')
ax.set_xlabel('Subjects')
ax.set_ylabel('Average score')
# 显示图形
plt.show()
```
绘制出来的堆积柱形图如下所示:
![stacked_bar_chart.png](https://i.loli.net/2021/05/25/RM1kVIpNmu5SqXc.png)
相关问题
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False men_means = (85.5, 91, 72, 59, 66, 55) women_means = (94, 82, 89.5, 62, 49, 53) ind = np.arange(len(men_means)) width = 0.2 fig = plt.figure() ax = fig.add_subplot(111) ax.bar(ind - width / 2, men_means, width, label='男生平均成绩') ax.bar(ind + 0.2, women_means, width, label='女生平均成绩') ax.set_title('高二男生女生各科平均成绩') ax.set_xticks(ind) ax.set_xticklabels(['语文', '数学', '英语', '物理', '化学', '生物']) plt.ylim(40, 100) ax.legend() plt.show()美化并转为环形图
以下是美化并转为环形图的代码:
```
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
men_means = (85.5, 91, 72, 59, 66, 55)
women_means = (94, 82, 89.5, 62, 49, 53)
ind = np.arange(len(men_means))
width = 0.2
fig, ax = plt.subplots(figsize=(8, 8))
ax.bar(ind - width / 2, men_means, width, label='男生平均成绩', color='tab:blue')
ax.bar(ind + 0.2, women_means, width, label='女生平均成绩', color='tab:orange')
ax.set_title('高二男生女生各科平均成绩', fontsize=20)
ax.set_xticks(ind)
ax.set_xticklabels(['语文', '数学', '英语', '物理', '化学', '生物'], fontsize=15)
ax.set_ylim(40, 100)
ax.legend(fontsize=15)
# 环形图部分
theta = np.linspace(0, 2 * np.pi, len(men_means) + 1)
radii = np.repeat(1.5, len(men_means) + 1)
ax1 = plt.subplot(111, projection='polar')
ax1.plot(theta, radii, color='black', linewidth=1)
for i in range(len(men_means)):
ax1.fill_between([theta[i], theta[i+1]], 0, radii[i+1], color='tab:blue', alpha=0.6)
ax1.fill_between([theta[i], theta[i+1]], 0, radii[i], color='tab:orange', alpha=0.6)
posA = ax1.transData.transform((theta[i], radii[i]))
posB = ax1.transData.transform((theta[i], radii[i+1]))
coordsA = ax.transData.inverted().transform(posA)
coordsB = ax.transData.inverted().transform(posB)
con = ConnectionPatch(xyA=coordsA, xyB=coordsB, coordsA="data", coordsB="data", lw=1, color='black', alpha=0.8)
fig.add_artist(con)
plt.tight_layout()
plt.show()
```
这个代码首先绘制了原始的柱状图,然后使用极坐标系绘制了环形图。环形图中,每个扇形的角度与柱状图中每个柱子对应,颜色则代表男女生的成绩。同时,为了使环形图与柱状图对应,我们使用 ConnectionPatch 将两个部分连接起来。最后,使用 tight_layout() 函数调整布局,使得图像更加美观。
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False data_a = np.array([85.5, 91, 72, 59, 66, 55]) data_b = np.array([94, 82, 89.5, 62, 49, 53]) plt.boxplot([data_a, data_b], labels=('男生各科平均成绩', '女生各科平均成绩'), meanline=True, widths=0.5, vert=False, patch_artist=True) plt.title('高二男生和女生各科平均成绩') plt.xlim(40, 100) plt.show()转为堆积面积图并美化
由于盒图和堆积面积图的图形表达方式不同,不能简单地将盒图转换为堆积面积图。以下是一个堆积面积图的例子,用于对比两组数据的占比情况:
```python
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data_a = np.array([85.5, 91, 72, 59, 66, 55])
data_b = np.array([94, 82, 89.5, 62, 49, 53])
fig, ax = plt.subplots()
ax.stackplot(range(len(data_a)), data_a, data_b, labels=('男生各科平均成绩', '女生各科平均成绩'))
ax.set_title('高二男生和女生各科平均成绩')
ax.set_xlim(0, len(data_a)-1)
ax.set_ylim(0, 200)
ax.legend(loc='upper left')
plt.show()
```
在这个例子中,我们使用了`stackplot()`函数来绘制堆积面积图。函数的第一个参数是X轴数据,第二个和第三个参数是两组数据,用于堆积在一起。我们还使用`labels`参数添加了图例,并使用`set_xlim()`和`set_ylim()`方法来设置X轴和Y轴的范围。
最后,我们可以使用各种美化技巧来增强图形的可读性,例如添加轴标签、调整字体大小和颜色等。