[英]Matplotlib polar bar-plot legend
我从调查表中获得了一些数据,这些数据提供了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()
结果如下:
我选择尝试使用图例来命名栏,因为实际的描述将相当长,例如“理解和交流”。 另一种选择是在主要刻度线之间使用x-tick标签(我也不知道如何做,但是无论如何看起来还是很糟糕的)。
现在:为什么不会出现其余的传说(我也随机得到了第二个传说,仅此而已)?
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()
自动将它们视为单独的label
,并为每个栏绘制图例项目。
...
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()
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.