【发布时间】:2023-04-01 18:23:01
【问题描述】:
我需要用与角度对应的颜色为圆形直方图着色。
我在 matplotlib 库中找到了一个示例,它以我需要的方式为极坐标散点图着色: https://matplotlib.org/examples/pie_and_polar_charts/polar_scatter_demo.html
但这是一个散点图,我需要一个圆形直方图,我使用这个问题的回复中的代码: Circular Histogram for Python
我希望能够进行更改,以便条形图具有第一张图像中的颜色。但是 ax.bar 不像散点图那样采用字符串颜色,返回错误。
这是圆形直方图的代码:
import numpy as np
import matplotlib.pyplot as plt
N = 80
bottom = 8
max_height = 4
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = max_height*np.random.rand(N)
width = (2*np.pi) / N
ax = plt.subplot(111, polar=True)
bars = ax.bar(theta, radii, width=width, bottom=bottom)
# Use custom colors and opacity
for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.jet(r / 10.))
bar.set_alpha(0.8)
plt.show()
编辑:在绘图的最后部分用半径代替 theta 会更改条形的颜色,但不会产生颜色在整个圆圈范围内连续变化的配色方案。我尝试按照 cmets 中的建议将 theta 标准化为度数和弧度:
bar.set_facecolor(math.degrees(r)/360))
和
bar.set_facecolor(plt.cm.jet(r/2*np.pi))
两者都会产生错误的解决方案。
【问题讨论】:
-
目前直方图条根据其半径着色(代码中的
radii)。现在您希望它根据角度着色(代码中的theta)。大测验题:您需要替换哪个变量才能发生这种情况? -
谢谢,这是有道理的,只需在自定义颜色部分的代码中用半径代替 theta。但这不会产生我需要的颜色(特别是它不会关闭颜色循环)。我尝试了不同的归一化常数,但失败了。
-
这个因子 10 是多少?
theta以弧度表示。您是否尝试将它们转换为度数? -
一个完整的圆包含 2π。所以不是 10 除以 2π。我想你仍然可以更新你的问题,以防你在这样做时遇到问题,但目前还不清楚什么会失败。
-
@ImportanceOfBeingErnest 谢谢,我尝试了弧度和度数,但都在 0 度时产生颜色不连续性(散点图没有)。我会更新问题
标签: python matplotlib pie-chart color-scheme polar-coordinates