Fri*_*ant 1 matplotlib bar-chart python-3.x colormap
我无法将颜色图定义为每个条的颜色。我怎样才能做到这一点?我编写了以下代码:
import matplotlib.pyplot as plt
quiz=[1,2,0,4,8,10]
plt.barh(range(len(quiz)), quiz, align='center', alpha=0.5, color='blue')
Run Code Online (Sandbox Code Playgroud)
它有效,但所有条形都只有一种颜色(此处为蓝色)。如何使用颜色图作为颜色?
color=plt.cm.get_cmap('bwr')
Run Code Online (Sandbox Code Playgroud)
给出一个
Error: TypeError: object of type 'ListedColormap' has no len()
Run Code Online (Sandbox Code Playgroud)
编辑:这篇文章给出了一些提示,但没有告诉我如何使颜色渐变对应于 x 值:如何用渐变填充 matplotlib 条?
所以,受到 Thomas Kühn 评论的启发,我得到了一个解决方案(不确定它是最干净的,但它有效)。
它基本上将具有渐变的图像放在初始水平条形图上。ax.imshow() 默认对给定值进行标准化。因此,为了使梯度依赖于 x 值,我们需要使用选项 norm=mpl.colors.NoNorm(vmin=0,vmax=1) 去除这种强制归一化:
fig, ax = plt.subplots()
data=[4,5,6,3,7,5]
bar = ax.barh(range(len(data)),data)
def gradientbars(bars):
ax = bars[0].axes
lim = ax.get_xlim()+ax.get_ylim()
for bar in bars:
bar.set_zorder(1)
bar.set_facecolor("none")
x,y = bar.get_xy()
w, h = bar.get_width(), bar.get_height()
grad = np.atleast_2d(np.linspace(0,1*w/max(data),256))
ax.imshow(grad, extent=[x,x+w,y,y+h], aspect="auto", zorder=0, norm=mpl.colors.NoNorm(vmin=0,vmax=1))
ax.axis(lim)
gradientbars(bar)
Run Code Online (Sandbox Code Playgroud)
您还可以使用 ax.imshow() 中的选项 cmap 更改颜色图。(例如:cmap=plt.get_cmap('coolwarm'))。
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |