我正在尝试使用颜色图来显示我的数据。我浏览了以下列表: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
我将解释您的工作,这可能会帮助您调试问题。
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.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. ]
因此,数据的第一点将获得上述数组的第一行作为其颜色值,依此类推。
根据您的情况,您绘制了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()
最后如果您想获得特定的输出,请编辑您的问题,我将更新我的答案。