странное значение диапазона в цветовой шкале, matplotlib - PullRequest
4 голосов
/ 19 октября 2010

Я новый пользователь 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и т.д. "

Спасибо, Вайшу

1 Ответ

2 голосов
/ 21 октября 2010

Да, вы можете вручную отформатировать все, что касается цветовой панели. Смотрите это:

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. Многие функции построения графиков, включая imshow, contourf и другие, содержат аргумент norm, который принимает объект Normalize. Вы можете установить атрибуты vmin или vmax этого объекта для настройки соответствующих значений цветовой шкалы.

  2. colorbar принимает аргументы ticks и format, чтобы настроить, какие тики отображать и как их отображать.

...