我从调查问卷中获得了一些数据,这些数据提供了6"维度和答案的答案。 (每个答案代表0-4的值)。我试图绘制6"尺寸中的每一个的平均值"在极地条形图中。
这是我的代码:
#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt
data = np.array([2.83333333, 1.6, 1.75, 2.6, 0.875, 1.75])
N = len(data)
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = data
width = 2 * np.pi / N
ax = plt.subplot(111, polar=True)
bars = ax.bar(theta, radii, width=width, bottom=0.0)
ax.yaxis.set_ticks([0,1,2,3,4])
ax.yaxis.set_ticklabels(['None','Mild','Moderate','Severe','Extreme'])
ax.xaxis.set_ticks(theta)
ax.xaxis.set_ticklabels([1,2,3,4,5,6])
ax.legend(['foo','bar','snafu','swag','s-fus','tarfu'])
for r, bar in zip(theta, bars):
bar.set_facecolor(plt.cm.jet(r / np.pi / 2))
bar.set_alpha(0.8)
plt.show()
结果如下:
http://i60.tinypic.com/2rxaatc.png http://i60.tinypic.com/2rxaatc.png
我选择尝试使用图例命名条形图,因为实际描述会很长,例如"理解和沟通"。另一种方法是在主要刻度之间使用x-tick标签(我不知道如何做到这一点,但无论如何它可能看起来很糟糕。)
现在:为什么其他传奇人物不会出现(我随机也得到了第二个,但那是关于它的?)
答案 0 :(得分:0)
bars
是一个Container
对象,其中包含构成条形图的六个matplotlib.patches.Rectangle
。默认情况下,legend()
似乎将其视为单个艺术家,因此您只需为条形图获取一个图例项目。
您可以强制legend()
通过使用替代语法调用每个艺术家的单独图例项目:
legend(sequence_of_artists, sequence_of_labels, ...)
试试这个:
ax.legend(bars, ['foo','bar','snafu','swag','s-fus','tarfu'])
更改条形图的颜色后,您需要创建图例,否则图例上的颜色将与条形图的颜色不匹配。
获得相同结果的另一种方法是设置每个条形的label
属性,类似于当前设置颜色的方式。当每个柱子都有自己的label
时,legend()
会自动将它们视为单独的,并为每个柱体绘制图例项。
...
labels = ['foo','bar','snafu','swag','s-fus','tarfu']
for r, bar, ll in zip(theta, bars, labels):
bar.set_facecolor(plt.cm.jet(r / np.pi / 2))
bar.set_alpha(0.8)
bar.set_label(ll)
ax.legend()
...