Python 中带有颜色图的极坐标条形图

问题描述 投票:0回答:1

我正在尝试创建一个有四个类别的极坐标图。每个类别都有两个值:

sleep_time
ahi
。我希望每个条形的大小与
sleep_time
成比例 - 这似乎有效。我还希望颜色基于也与每个类别相关联的
ahi
。然后有一个颜色条来反映这一点。我可以运行
sleep_time
功能,但我的颜色是问题。这是我到目前为止所拥有的:

import matplotlib.pyplot as plt
import numpy as np

categories = ['Right', 'Supine', 'Left', 'Prone']
sleep_time = [251.5, 40, 130, 15.5]
ahi = [12.5, 65.6, 8.2, 0.0]


angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False)

fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(projection='polar'))

colors = plt.cm.viridis_r(np.linspace(0, 100, len(ahi)))

ax.bar(angles, sleep_time, width=1.0, align='center', alpha=0.5)
ax.bar(angles, ahi, width=0.4, align='edge', alpha=0.5, color=colors)

ax.set_xticks(angles)
ax.set_xticklabels(categories)

colorbar = plt.colorbar(ahi)
colorbar.set_ticks([0, 30, 60, 90, 120, 150, 180])

plt.show()

plt.savefig('position_vs._ahi.png')
python matplotlib charts
1个回答
0
投票

你就快到了。只需更改

ahi
创建颜色的方式即可。也无需添加 2 个栏,您可以直接将
ahi
中的值添加为
color=
中的
ax.bar
参数。然后添加
Mappable
以获得符合
ahi
的颜色条:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cm import ScalarMappable
from matplotlib.colors import Normalize

categories = ['Right', 'Supine', 'Left', 'Prone']
sleep_time = [251.5, 40, 130, 15.5]
ahi = [12.5, 65.6, 8.2, 0.0]

angles = np.linspace(0, 2*np.pi, len(categories), endpoint=False)

fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='polar')

norm = Normalize(vmin=min(ahi), vmax=max(ahi))
cmap = plt.cm.viridis_r
colors = cmap(norm(ahi))

bars = ax.bar(angles, sleep_time, width=0.8, align='center', alpha=0.7, color=colors)

ax.set_xticks(angles)
ax.set_xticklabels(categories)

sm = ScalarMappable(norm=norm, cmap=cmap)
sm.set_array([])
colorbar = fig.colorbar(sm, ax=ax)  
colorbar.set_label('AHI Value', rotation=270, labelpad=15)

plt.tight_layout()
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.