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

时间:2014-05-20 15:51:14

标签: python matplotlib pandas dataframe

我有一个数据框,用于绘制线条和表格。色彩图设置为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,但没有成功。

值得注意的是,我使用的是pandas 0.14。

2 个答案:

答案 0 :(得分: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')

enter image description here

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')

enter image description here

答案 1 :(得分:0)

我遇到了同样的问题,直到我意识到matplotlib色彩图具有可以手动设置的_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更清洁,我希望这有帮助!