Python - 如何使色条方向水平?

20

我有一个带basemap的图,并在其上添加了colormesh,colorbar设置为cbar。我想将colorbar方向设置为水平而不是垂直,但当我在extend='max'后在cbar=m.colorbar行中设置orientation='horizontal'时,我会收到以下错误消息:“colorbar() got multiple values for keyword argument 'orientation'”。

另一个问题上的某人解释了为什么会出现这种情况,但我实在无法理解答案或看到如何修复的解释。有人可以帮忙吗?我尝试使用plt.colorbar,但由于某种原因,它不接受我的刻度设置。

这是我的图像在更改之前的样子...

#Set cmap properties
bounds = np.array([0.1,0.2,0.5,1,2,3,4,6,9,13,20,30])
norm = colors.LogNorm(vmin=0.1,vmax=30) #creates logarithmic scale

#Create basemap
fig = plt.figure(figsize=(15.,10.))
m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=0,urcrnrlon=360.,lon_0=180.,resolution='c')
m.drawcoastlines(linewidth=1)
m.drawcountries(linewidth=1)
m.drawparallels(np.arange(-90,90,30.),linewidth=0.3)
m.drawmeridians(np.arange(-180.,180.,90.),linewidth=0.3)   
meshlon,meshlat = np.meshgrid(lon,lat)
x,y = m(meshlon,meshlat)

#Plot variables
trend = m.pcolormesh(x,y,lintrends_36,cmap='jet', norm=norm, shading='gouraud')

#Set plot properties
plt.tight_layout()
#Colorbar
cbar=m.colorbar(trend, size='3%',ticks=bounds,extend="max") #THIS LINE
cbar.set_label(label='Linear Trend (mm/day/decade)',size=30)
cbar.set_ticklabels(bounds)
#Titles & labels
plt.suptitle('Linear Trends of Precipitation (CanESM2)',fontsize=40,y=0.962)
plt.title('a) 1979-2014',fontsize=40)
plt.ylabel('Latitude',fontsize=30)
plt.show()

这里输入图片描述

当尝试更改方向时(其他所有代码保持不变)... 这里输入图片描述

此时地图如下所示。

这里输入图片描述


你能发布一下错误的回溯信息,还有你提到的帖子链接吗? - Laurent S
如果您使用 fig.colorbar 而不是 m.colorbar 会怎样呢? - Paul H
添加了traceback,当我尝试使用plt.colorbar时,我意识到我使用cbar设置的一些参数不起作用。例如,在cbar = m.colorbar()行中的ticks = bounds不知何故无法工作。这是我提到的帖子- https://dev59.com/N2Mk5IYBdhLWcg3w0RCU - Cebbie
两件事情:我认为你链接的答案不是问题所在,colorbar 的声明在回溯中看起来没问题。此外,你发布的代码与回溯中显示的代码不同,在回溯中出现了 orientation='horizontal',而在你发布的代码中没有 :) - Laurent S
当我尝试改变方向时,当然会出现回溯错误。如果我不包含方向参数,则不会出现该错误。我编辑了帖子以展示带有回溯代码的图表外观。 - Cebbie
显示剩余2条评论
2个回答

16

正如其他人在评论中已经提到的那样

plt.colorbar(orientation='horizontal')

是一种替代(更简单)的解决方案!


15

您需要使用location="bottom"

cbar=m.colorbar(trend, size='3%',ticks=bounds,extend="max",location="bottom")

我从basemap文档的这个示例中得到了这个。

输入图像描述在此处


谢谢!我还使用了“pad”参数将其定位在我的x轴标签下方。 - Cebbie
32
等效地,可以使用plt.colorbar(orientation='horizontal')来实现。 - AruniRC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接