2017-02-21 16 views
3

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

Я также добавляю соответствующий код, чтобы вы могли лучше понять, почему я пытаюсь это сделать и советовать мне по правильному/умному способу сделать это.

import numpy as np 
import matplotlib.pyplot as plt 

x=np.genfromtxt('nbr_lig_bound1.dat') 
x1=np.genfromtxt('nbr_lig_bound2.dat') 
x2=np.genfromtxt('nbr_lig_bound3.dat') 
# doing so because imshow requieres a 2D array 
# best way I found and probably not the proper way to get it done 
x=np.expand_dims(x, axis=0) 
x=np.vstack((x,x)) 
x1=np.expand_dims(x1, axis=0) 
x1=np.vstack((x1,x1)) 
x2=np.expand_dims(x2, axis=0) 
x2=np.vstack((x2,x2)) 
# hoping that this would compensate for sharex shrinking my X range to 
# the shortest array 
ax[0].set_xlim(1,24) 
ax[1].set_xlim(1,24) 
ax[2].set_xlim(1,24) 


fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(6,6), sharex=True) 
fig.subplots_adjust(hspace=0.001) # this seem to have no effect 

p1=ax[0].imshow(x1[:,::10000], cmap='autumn_r') 
p2=ax[1].imshow(x2[:,::10000], cmap='autumn_r') 
p3=ax[2].imshow(x[:,::10000], cmap='autumn') 

Вот что я мог бы достичь до сих пор: Actual results

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

enter image description here

+0

Не могли бы вы описать, что именно вам не нравится в результате результата? «Желаемый» сюжет отличается во многих аспектах, неясно, чего вы действительно хотите. – ImportanceOfBeingErnest

+0

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

+0

На самом деле, чем больше я увеличиваю количество точек данных, которые я рисую, тем больше белые пробелы на моем участке, а более тонкая - цветная строка/раздел, показывающий мои данные. Вот почему я думаю, что, возможно, я пойду в неправильном направлении, используя imshow здесь. –

ответ

1

Используя fig.subplots_adjust(hspace=0) наборов по вертикали (высота) пространство между подзаговоров к нулю, но не регулирует вертикальное пространство в пределах каждого подзаговоре. По умолчанию plt.imshow имеет соотношение по умолчанию (rc image.aspect), обычно устанавливаемое таким образом, чтобы пиксели были квадратами, чтобы вы могли точно воссоздать изображения. Чтобы изменить это, используйте aspect='auto' и соответствующим образом настройте ylim ваших осей.

Например:

# you don't need all the `expand_dims` and `vstack`ing. Use `reshape` 
x0 = np.linspace(5, 0, 25).reshape(1, -1) 
x1 = x0**6 
x2 = x0**2 

fig, axes = plt.subplots(3, 1, sharex=True) 
fig.subplots_adjust(hspace=0) 

for ax, x in zip(axes, (x0, x1, x2)): 
    ax.imshow(x, cmap='autumn_r', aspect='auto') 
    ax.set_ylim(-0.5, 0.5) # alternatively pass extent=[0, 1, 0, 24] to imshow 
    ax.set_xticks([]) # remove all xticks 
    ax.set_yticks([]) # remove all yticks 

plt.show() 

дает

enter image description here

Чтобы добавить Colorbar, я рекомендую смотреть на this answer, который использует fig.add_axes() или глядя на документацию для AxesDivider (который я лично, как лучше).

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

  • Нет связанных вопросов^_^