несколько графиков в одной фигуре в Python
Я новичок в python и пытаюсь построить несколько строк на одном рисунке, используя matplotlib. Значение моей оси Y хранится в словаре, и я делаю соответствующие значения в оси X в моем следующем коде
мой код выглядит так:
for i in range(len(ID)):
AxisY= PlotPoints[ID[i]]
if len(AxisY)> 5:
AxisX= [len(AxisY)]
for i in range(1,len(AxisY)):
AxisX.append(AxisX[i-1]-1)
plt.plot(AxisX,AxisY)
plt.xlabel('Lead Time (in days)')
plt.ylabel('Proportation of Events Scheduled')
ax = plt.gca()
ax.invert_xaxis()
ax.yaxis.tick_right()
ax.yaxis.set_label_position("right")
plt.show()
но я получаю отдельные фигуры с одним сюжетом один за другим. Кто-нибудь может помочь мне понять, что не так с моим кодом? Почему я не могу создать несколько линий? Большое спасибо!
4 ответов
это очень просто сделать:
import matplotlib.pyplot as plt
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.legend(loc='best')
plt.show()
вы можете продолжать добавлять plt.plot
столько раз, сколько вам нравится. Что касается line type
, вам нужно сначала указать цвет. Так что для blue это b
. И для нормальной линии это -
. Примером может служить:
plt.plot(total_lengths, sort_times_heap, 'b-', label="Heap")
поскольку у меня нет достаточно высокой репутации, чтобы комментировать, я отвечу на вопрос Ляна 20 февраля в 10:01 как ответ на первоначальный вопрос.
для того, чтобы показать метки строк, вам нужно добавить plt.легенда к вашему коду. чтобы построить на предыдущем примере выше, который также включает заголовок, ylabel и xlabel:
import matplotlib.pyplot as plt
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.plot(<X AXIS VALUES HERE>, <Y AXIS VALUES HERE>, 'line type', label='label here')
plt.title('title')
plt.ylabel('ylabel')
plt.xlabel('xlabel')
plt.legend()
plt.show()
редактировать: Я только что понял, прочитав ваш вопрос снова, что я не ответил на ваш вопрос. Вы хотите ввести несколько строк на одном участке. Однако я оставлю это, потому что это служило мне очень хорошо несколько раз. Я надеюсь, что вы найдете полезным, когда-нибудь
Я нашел это некоторое время назад при изучении python
import matplotlib as plt
import matplotlib.gridspec as gridspec
fig = plt.figure()
# create figure window
gs = gridspec.GridSpec(a, b)
# Creates grid 'gs' of a rows and b columns
ax = plt.subplot(gs[x, y])
# Adds subplot 'ax' in grid 'gs' at position [x,y]
ax.set_ylabel('Foo') #Add y-axis label 'Foo' to graph 'ax' (xlabel for x-axis)
fig.add_subplot(ax) #add 'ax' to figure
вы также можете сделать разные размеры на одной фигуре, используйте ломтики в этом случае:
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0,:]) # row 0 (top) spans all(3) columns
обратитесь к docs для получения дополнительной помощи и примеров. Этот маленький бит я набрал для себя один раз и очень основан/скопирован из документов. Надеюсь, это поможет... Я помню, что это боль в#$%, чтобы познакомиться с нотацией среза для разных размеров участков на одном рисунке. После этого я думаю, что это очень просто :)
OP утверждает, что каждый элемент участка перезаписывает предыдущий, а не объединяется в один участок. Это может произойти даже с одним из многих предложений, сделанных другими ответами. Если вы выберете несколько строк и запустите их вместе, скажите:
plt.plot(<X>, <Y>)
plt.plot(<X>, <Z>)
элементы графика обычно отображаются вместе, один слой поверх другого. но если вы выполняете код строка за строкой, каждый участок будет перезаписывать предыдущий.
этот возможно, это то, что случилось с операцией. Это просто случилось со мной: я установил новую привязку ключа для выполнения кода одним нажатием клавиши (on spyder
), но моя привязка ключа выполняла только текущую строку. Решение состояло в том, чтобы выбрать строки целыми блоками или запустить весь файл.