添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
稳重的甘蔗  ·  python ...·  1 年前    · 
深情的杯子  ·  关于使用jq ...·  1 年前    · 

Python/Matplotlib:使用contourf的colorbar不尊重自定义cmap的tick标签。

3 人关注

我创建了一个自定义的cmap和ticklabels,用contourf做了一个图,但不是所有的ticklabels和所有的颜色都被colorbar所考虑,然而当我使用imshow时,我得到了我想要的结果。 这是我的代码。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
from matplotlib.colors import BoundaryNorm
x = np.arange(-6,6,0.25)
y = np.arange(-6,6,0.25)
x, y = np.meshgrid(x,y)
z = np.sqrt(x**2+y**2)
newcolors = np.vstack((plt.cm.YlGn(np.linspace(0, 1, 4))[1:,:], plt.cm.Blues(np.linspace(0, 1, 6))))
palette = ListedColormap(newcolors, name='test')
palette.set_over('darkred')
palette.set_under('yellow')
tickslabels=[0.5,1.0,1.5,2.0,4.0,6.0,8.0,10.0,12.0,14.0]
norm=BoundaryNorm(tickslabels, len(tickslabels)-1)
fig1 = plt.figure('imshow')
img=plt.imshow(z, cmap=palette, norm=norm)
plt.colorbar(img, ticks=tickslabels, spacing='proportional', extend='both')
plt.title('imshow')
fig2 = plt.figure('contourf')
img=plt.contourf(x, y, z, cmap=palette, levels=tickslabels, extend='both') #norm=norm)
plt.colorbar(img, ticks=tickslabels, spacing='proportional', extend='both')
plt.title('contourf')
plt.show()

这是用imshow和contourf得到的结果。请注意imshow的颜色条,绿色从0.5到2.0,蓝色从2.0到14.0,这是我想要的结果。但是使用contourf的结果却不一样。 我的错误是什么?我忘记设置任何参数了吗?

python
matplotlib
joaohenry23
joaohenry23
发布于 2020-06-09
1 个回答
Sheldore
Sheldore
发布于 2020-06-09
已采纳
0 人赞同

在绘制等高线图 norm=norm 时,你必须使用定义的 img=plt.contourf(...) 。当以下列方式使用时,两个颜色条是相同的