我有一个数据框,用于绘制线条和表格。 colormap设置为Purples_r
,从紫色变为白色。如何限制色彩图,使出现的最浅的颜色不是白色,而只是浅紫色?
fig, ax = plt.subplots(1, 1)
ax.get_xaxis().set_visible(False)
df.plot(marker='o', colormap='Purples_r', table=np.round(df.T, 2), ax=ax)
我试图跟随Setting matplotlib colorbar range,但是没有成功。
值得注意的是,我正在使用熊猫0.14。
这可以通过获取色彩映射的segmentdata
并使自定义色彩映射限制为更窄的颜色范围来完成:
In [30]:
from matplotlib import colors
from matplotlib import cm
D={item: cm.Purples_r._segmentdata[item][3:-3] for item in ['blue', 'green', 'red']}
#only use the middle range of color
for item in ['blue', 'green', 'red']:
seg=np.linspace(0,1,len(D[item]))
for i in range(len(D[item])):
D[item][i]=(seg[i],D[item][i][1],D[item][i][2])
In [31]:
New_cm = colors.LinearSegmentedColormap('New_cm', D)
df=pd.DataFrame(np.random.random((5,5)))
In [32]:
fig, ax = plt.subplots(1, 1)
ax.get_xaxis().set_visible(False)
df.plot(marker='o', colormap=cm.Purples_r, ax=ax)
plt.title('Original Purples_r')
plt.savefig('1.png')
In [33]:
fig, ax = plt.subplots(1, 1)
ax.get_xaxis().set_visible(False)
df.plot(marker='o', colormap=New_cm, ax=ax)
plt.title('Limited Purples_r')
plt.savefig('2.png')
我遇到了同样的问题,直到我意识到matplotlib colormaps有_i_under
和_i_above
属性,你可以手动设置。在我的情况下,我使用matplotlib.cm.Blues_r
,但我想将0(恰好是我的最低值)设置为另一种颜色而不是白色。
cmap = matplotlib.cm.Blues_r
cmap._i_under = 0
cmap.set_under('green')
上面的代码适合我。然后你只需要将colormap传递给pandas.plot()
。
我对matplotlib内部对象没有多少经验,但_i_under
和_i_above
似乎是从matplotlib颜色类继承的(参见代码here)。
由于使用pandas plot方法比使用matplotlib或pyplot更清洁,我希望这有帮助!