Сюжеты внутри для петель - PullRequest
       23

Сюжеты внутри для петель

0 голосов
/ 13 апреля 2019

Я хочу поместить четыре файловых графика в 1 фигуру подпункта из цикла.

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

Когда я реализую некоторый код подзаговора, он делает много вещей, но не то, что я хочу. Я хочу, чтобы на каждом файле была 1 фигура с 2 строками и 2 столбцами, а не 4 фигуры, повторяющие только 1 файл для каждого субплана.

Это мой сокращенный код:

for lim in mlims:
   fil= ilfil + innm +'kd00' + jad +'nam'
   ln= Dataset(ilfil)
   longit = vn.variables['longitude'][:]
   latitud = vn.variables['latitude'][:] 
   ## etc .....
   aode       = var1+var2
   aod=np.squeeze(aode[:,2,:,:])

   lons, lats = np.meshgrid(lonitud, latatit)
   x, y = map(lons, lats)

   ii=[0,1,2,3]
   fig, axes = plt.subplots(nrows=4, ncols=4, figsize=(2,5))
   for ax,mon_index,lname in zip(axes.flatten(),ii, mnames):


       axis=np.arange(0+0.025,0.5+0.025,0.025)

       cs = ax.contourf(x,y,aod,axis,cmap='seismic',linewidths=1.)
       cbar = map.colorbar(cs)

       plt.title(AOD)

plt.show()

Код выводит это: 1 - это график файла, но я не хочу, чтобы один и тот же файл повторялся на одной фигуре подзаговора, а 2+ - это график

Я хочу вывести:

1 1 1 2 - для первого файла

1 1 1 3 - второй файл

1 1 1 4 - третий

1 1 1 5

То, что я пытаюсь получить, это просто: 2 3 4 5

1 Ответ

0 голосов
/ 13 апреля 2019

Сделайте фигуру и подзаголовки первыми;перебирать файлы и оси;построить данные из файла по текущим осям.Вот игрушечный пример, который демонстрирует процесс.

files = [range(3),range(4),range(5),range(6)]
fig, axarr = plt.subplots(2,2)
for data, ax in zip(files, axarr.flat):
    # if you are looping over filenames
    # process/extract the data from the file here
    ax.plot(data)

демо субплотов из Matplotlib docs

.subplots() возвращает рисунок и массив подзаговоровAxes.

>>> axarr
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000D2BA358>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x000000000F3F29B0>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x000000000F429080>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x000000000F44F710>]],
      dtype=object)

Вместо последовательной итерации по осям, вы можете выбрать их, индексируя в (?) Массив.

>>> axarr[0,1]

<matplotlib.axes._subplots.AxesSubplot object at 0x000000000F3F29B0>
>>>

pyplot имеет концепцию текущих осей.Вызов метода .subplot() сделает оси current , тогда последующие операторы будут действовать на эти оси.Это еще один способ работать на отдельных подпоследовательностях из последовательности.

plt.subplot(rows,cols,1)
plt.plot(range(10),'r')
plt.subplot(rows,cols,3)
plt.plot(range(100),'b')
plt.subplot(rows,cols,2)
plt.plot(range(5),'o')
plt.subplot(rows,cols,4)
plt.plot(range(5),'g')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...