如何使用零色为不带不连续色的极坐标条形图着色

时间:2019-02-08 20:29:26

标签: python matplotlib pie-chart color-scheme polar-coordinates

我需要使用与角度相对应的颜色为圆形直方图上色。

我在matplotlib库中找到了一个示例,该示例以我需要的方式为极谱散点图着色: https://matplotlib.org/examples/pie_and_polar_charts/polar_scatter_demo.html

但这是一个散点图,我需要一个圆形直方图,并且我使用了对此问题的回答中的代码: Circular Histogram for Python

我希望能够进行更改,以使条形具有第一个图像的颜色。但是ax.bar不像散点图那样采用字符串颜色,返回错误。

这是圆形直方图的代码:

customer_group

编辑:在图的最后部分用半径代替theta会更改条形的颜色,但不会产生颜色在整个圆范围内连续变化的配色方案。我尝试按照评论中的建议将度数和弧度归一化。

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()

bar.set_facecolor(math.degrees(r)/360))

两者都会产生错误的解决方案。

2 个答案:

答案 0 :(得分:3)

the example似乎需要大修。可以简化如下,其中从问题中请求的两个更改是:

  1. 使用其他颜色表(此处为hsv)。
  2. 将角度(theta)而不是半径(radii)编码为彩色。

不需要循环。

import numpy as np
import matplotlib.pyplot as plt

# Fixing random state for reproducibility
np.random.seed(19680801)

# Compute pie slices
N = 20
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = 2 * np.pi / N
colors = plt.cm.hsv(theta/2/np.pi)

ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta, radii, width=width, bottom=4, color=colors)

plt.show()

enter image description here

答案 1 :(得分:0)

我将弧度转换为度并除以360。要将弧度转换为度,我使用math.degrees()

import math

# Use custom colors and opacity
for th, bar in zip(theta, bars):
    bar.set_facecolor(plt.cm.hsv(math.degrees(th)/360))
    bar.set_alpha(0.8)

编辑正如我在评论中提到的那样,您提供的示例使用hsv色彩映射表,而不是您使用的jet。答案已更新。

enter image description here