2015-06-02 3 views
2

Я рисую двухмерный массив в python, используя matplotlib, и у меня возникают проблемы с форматированием меток. Итак, во-первых, мои данные в настоящее время организованы как 2-мерный массив с (высота, широта). Я рисую значения электронной плотности как функции высоты и широты (в основном продольный срез в определенное время).Изменение ярлыков меток без влияния на график

Я хочу обозначить ось x, идущую от -90 до 90 градусов с интервалом 30 градусов, а значения y с другим массивом возвышений (каждый запуск модели имеет разные значения высоты, поэтому я не могу вручную назначить произвольное возвышение) , У меня есть массивы с значениями широты в нем, а другой с значениями высоты - как одномерные массивы.

Вот мой код:

from netCDF4 import Dataset 
import numpy as np 
import matplotlib.pyplot as plt 

#load the netcdf file into a variable 
mar120="C:/Users/WillEvo/Desktop/sec_giptie_cpl_mar_120.nc" 

#grab the data into a new variable 
fh=Dataset(mar120,mode="r") 

#assign model variable contents to python variables 
lons=fh.variables['lon'][:] 
lats=fh.variables['lat'][:] 
var1=fh.variables['UN'][:] 

#specifying which time and elevation to map 
ionst=var1[0,:,:,21] 
ionst=ionst[0:len(ionst)-1] 

#close the netCDF file 
fh.close() 

#Set the figure, size, and resolution 
plt.figure(figsize=(8,6), dpi=100, facecolor='white') 
plt.subplot(1,1,1) 

plt.imshow(ionst, origin='lower', interpolation='spline16') 

plt.xticks([-90, -60, -30, 0, 30, 60, 90]) 
plt.show() 

Если я не включаю аргумент plt.xticks я получаю следующее хорошее изображение, но плохие клеща этикетки:

Good Image but bad tick labeling

Если я включаю аргумент plt.xticks Я получаю следующее:

Bad figure, data remains static

Как я могу это исправить? Я хочу, чтобы данные следовали за изменением оси (но были точными). Мне также нужно сделать это для оси y, но без ввода вручную значений и вместо этого массива значений. Благодаря

+0

ли эту запись помощь? http://stackoverflow.com/questions/18696122/change-values-on-matplotlib-imshow-graph-axis – N1B4

ответ

3

Используйте extent аргумент imshow для установки х и у диапазонов изображения, и использовать aspect='auto', чтобы соотношение сторон изображения, чтобы подогнать фигуру. Например, следующий код

In [68]: from scipy.ndimage.filters import gaussian_filter 

In [69]: np.random.seed(12345) 

In [70]: a = np.random.randn(27, 36) 

In [71]: b = gaussian_filter(a, 4) 

In [72]: ymin = 0 

In [73]: ymax = 1 

In [74]: plt.imshow(b, origin='lower', extent=[-90, 90, ymin, ymax], aspect='auto') 
Out[74]: <matplotlib.image.AxesImage at 0x1115f02d0> 

In [75]: plt.xticks([-90, -60, -30, 0, 30, 60, 90]) 
Out[75]: 
([<matplotlib.axis.XTick at 0x108307cd0>, 
    <matplotlib.axis.XTick at 0x1101c1c50>, 
    <matplotlib.axis.XTick at 0x1115d4610>, 
    <matplotlib.axis.XTick at 0x1115f0d90>, 
    <matplotlib.axis.XTick at 0x1115ff510>, 
    <matplotlib.axis.XTick at 0x11161db10>, 
    <matplotlib.axis.XTick at 0x111623090>], 
<a list of 7 Text xticklabel objects>) 

генерирует этот сюжет:

image

+0

Спасибо тонну! Существует так много документации для matplotlib, что иногда найти то, что вам нужно, это кошмар. Сэкономил мне часы поиска. Благодаря! –

Смежные вопросы