Matplotlib色彩图无法正常工作

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

我正在尝试使用颜色图来显示我的数据。我浏览了以下列表:https://matplotlib.org/examples/color/colormaps_reference.html

我发现RdBu和Seismic数据图非常适合我要通过条形图实现的功能。但是,使用它们中的任一个只能给我颜色图中的一种颜色-红色或蓝色(使用颜色图的反面)。有人可以指出我做错了吗?

这是我正在使用的代码:

xvals = df.index
y = np.array([a,b,c,d])
my_colors = cm.seismic_r(np.linspace(.1, .9, 10))
plt.bar(xvals, y, width = 1.0, tick_label = xvals, color = my_colors)

这是我得到的输出:Only red and not the red-blue gradient I was hoping for

python matplotlib colormap
1个回答
0
投票

我将解释您的工作,这可能会帮助您调试问题。

np.linespace

np.linspace(.1, .9, 10)返回以0.1-0.9间隔的10个均匀间隔的数字:[0.1 0.18888889 0.27777778 0.36666667 0.45555556 0.544444440.63333333 0.72222222 0.81111111 0.9]


cm。地震

然后您在cm.seismic上输入上述数组。这将为linspace的每个点提供一个从蓝色到红色的颜色值。因此,通过调用cm.seismic(np.linspace(.1, .9, 10)),您可以获得以下颜色映射:

Red         Green      Blue       Alpha (Opacity)
[0.         0.         0.5745098  1.        ]
[0.         0.         0.82705882 1.        ]
[0.11372549 0.11372549 1.         1.        ]
[0.45882353 0.45882353 1.         1.        ]
[0.81960784 0.81960784 1.         1.        ]
[1.         0.81960784 0.81960784 1.        ]
[1.         0.45882353 0.45882353 1.        ]
[1.         0.11372549 0.11372549 1.        ]
[0.87647059 0.         0.         1.        ]
[0.69607843 0.         0.         1.        ]

因此,数据的第一点将获得上述数组的第一行作为其颜色值,依此类推。


plt.bar

根据您的情况,您绘制了4个数据点(条形图)。因此,第一栏的颜色表的第一行(0. 0. 0.5745098 1.)为深蓝色。数据上有4条,您将只使用颜色图的前4行,永远不会达到红色。

我用来重现您的问题的代码:

import numpy as np
import matplotlib.pyplot as plt

xvals = [0,1,2,3]
y = np.array([30000,35000,40000,50000])
cmap=plt.get_cmap("seismic")
print(np.linspace(.1, .9, 10))
my_colors = cmap(np.linspace(.1, .9, 10))
print(my_colors)
plt.bar(xvals, y, width = 1.0, tick_label = xvals, color=my_colors)

plt.show()

最后如果您想获得特定的输出,请编辑您的问题,我将更新我的答案。

© www.soinside.com 2019 - 2024. All rights reserved.