我有一个数据框,用于绘制线条和表格。色彩图设置为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。
答案 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')
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')
答案 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更清洁,我希望这有帮助!