Построение горизонтальной линии на нескольких подзаголовках в python с использованием pyplot

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

gs1 = gridspec.GridSpec(8, 2)
gs1.update(left=0.12, right=.94, wspace=0.12)
ax1 = plt.subplot(gs1[0:2, :])
ax2 = plt.subplot(gs1[3:5, :], sharey=ax1)
ax3 = plt.subplot(gs1[6:8, :], sharey=ax1)

ax1.scatter(theta_cord, density, c = 'r', marker= '1')
ax2.scatter(phi_cord, density, c = 'r', marker= '1')
ax3.scatter(r_cord, density, c = 'r', marker= '1')
ax1.set_xlabel('Theta (radians)')
ax1.set_ylabel('Galaxy count')
ax2.set_xlabel('Phi (radians)')
ax2.set_ylabel('Galaxy count')
ax3.set_xlabel('Distance (Mpc)')
ax3.set_ylabel('Galaxy count')
plt.ylim((0,0.004))
loc = plticker.MultipleLocator(base=0.001)
ax1.yaxis.set_major_locator(loc)

plt.axhline(y=0.002, xmin=0, xmax=1, hold=None)

plt.show()

Это генерирует следующее: введите здесь описание изображения

Опять же, я хочу, чтобы линия, которую я нарисовал на последнем участке, отображалась и на первых двух участках. Как я могу это сделать?


person Abhinav Kumar    schedule 15.01.2014    source источник
comment
В общем, чем меньше ненужных деталей (таких как ваши метки осей, ваши фактические данные) содержит ваш вопрос, тем лучше. Лучше всего, если ваш код поддерживает копирование и вставку.   -  person tacaswell    schedule 15.01.2014


Ответы (2)


Я нашел способ сделать это для всех, кто наткнется на это в любом случае.

Нам нужно заменить следующую строку из ОП:

plt.axhline(y=0.002, xmin=0, xmax=1, hold=None)

Мы заменяем его на:

ax1.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)
ax2.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)
ax3.axhline(y=0.002,xmin=0,xmax=3,c="blue",linewidth=0.5,zorder=0)

Это производит:

введите здесь описание изображения

person Abhinav Kumar    schedule 15.01.2014
comment
Пожалуйста, не забудьте принять свой собственный ответ, когда он позволит вам. Вы также можете прочитать stackoverflow.com/questions/16849483/ для объяснения интерфейса pyplot и OO. - person tacaswell; 15.01.2014
comment
Согласно документации, как xmin, так и xmax должно быть в диапазоне [0,1]. использование xmax=3 здесь вводит в заблуждение. - person jdhao; 22.05.2018

Поскольку вы определили ax1, ax2 и ax3, на них легко рисовать горизонтальные линии. Для них это нужно делать отдельно. Но ваш код можно упростить:

for ax in [ax1, ax2, ax3]:
    ax.axhline(y=0.002, c="blue",linewidth=0.5,zorder=0)

Согласно документации axhline, xmin и xmax должны находиться в диапазоне (0,1). Нет никаких шансов, что xmax=3.0. Поскольку вы хотите провести горизонтальную линию по осям (что является поведением метода axhline по умолчанию), вы можете просто опустить параметры xmin и xmax.

person jdhao    schedule 21.05.2018