繁体   English   中英

Matplotlib极地图图例

[英]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()

结果如下:

http://i60.tinypic.com/2rxaatc.png

我选择尝试使用图例来命名栏,因为实际的描述将相当长,例如“理解和交流”。 另一种选择是在主要刻度线之间使用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属性,类似于您当前设置颜色的方式。 当每个栏都有自己的labellegend()自动将它们视为单独的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM