matplotlib中颜色条的奇怪范围值

4 投票
1 回答
5582 浏览
提问于 2025-04-16 05:45

我刚开始使用Python和matplotlib,这可能是个简单的问题,但我在网上搜索了几个小时也没找到解决办法。

我正在绘制降水数据,这些数据是NetCDF格式的。我觉得奇怪的是,这些数据里没有任何负值。(我检查过很多次,确保这一点。)但是,颜色条上的值却是从一个负值开始的(比如-0.0000312等等)。这让我很困惑,因为我没有对数据做任何处理,只是从大文件中选择了一部分数据进行绘图。

所以我的代码没有做太多的修改。以下是我的代码:

from mpl_toolkits.basemap import Basemap  
import numpy as np  
import matplotlib.pyplot as plt  
from netCDF4 import Dataset  
cd progs  
f=Dataset('V21_GPCP.1979-2009.nc')  
lats=f.variables['lat'][:]  
lons=f.variables['lon'][:]  
prec=f.variables['PREC'][:]  
la=lats[31:52]  
lo=lons[18:83]  
pre=prec[0,31:52,18:83]  
m = Basemap(width=06.e6,height=05.e6,projection='gnom',lat_0=15.,lon_0=80.)  
x, y = m(*np.meshgrid(lo,la))  
m.drawcoastlines()  
m.drawmapboundary(fill_color='lightblue')  
m.drawparallels(np.arange(-90.,120.,5.),labels=[1,0,0,0])  
m.drawmeridians(np.arange(0.,420.,5.),labels=[0,0,0,1])  
cs=m.contourf(x,y,pre,50,cmap=plt.cm.jet)  
plt.colorbar()  

运行这段代码后,我得到了一个漂亮的图,颜色条的起始值是-0.00001893,其余的都是正值,我相信这些都是正确的。就是这个最小值让我感到困扰。

我想知道:

  1. 我的代码有什么问题吗?因为我知道数据是正确的。
  2. 有没有办法手动把这个值改成0?
  3. 每次运行代码时,颜色条的值会变化,这正常吗?因为对于同样的数据,下次运行代码时,值会变成“ -0.00001893, 2.00000000, 4.00000000, 6.00000000”等等。
  4. 我想把它们自定义成“0.0, 2.0, 4.0, 6.0”等等。

谢谢,
Vaishu

1 个回答

2

是的,你可以手动设置颜色条的所有格式。看看这个:

import matplotlib.colors as mc
import matplotlib.pyplot as plt
plt.imshow(X, norm=mc.Normalize(vmin=0))
plt.colorbar(ticks=[0,2,4,6], format='%0.2f')
  1. 很多绘图函数,比如 imshowcontourf 等,都有一个叫 norm 的参数,它需要一个 Normalize 对象。你可以通过设置这个对象的 vminvmax 属性,来调整颜色条上对应的值。

  2. colorbar 函数有 ticksformat 参数,可以用来调整显示哪些刻度,以及如何显示这些刻度。

撰写回答