在pandas df.plot中设置色彩映射限制

问题描述 投票:3回答:2

我有一个数据框,用于绘制线条和表格。 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。

python matplotlib pandas dataframe
2个回答
3
投票

这可以通过获取色彩映射的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')


0
投票

我遇到了同样的问题,直到我意识到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更清洁,我希望这有帮助!

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