Подтвердить что ты не робот

Множественный график на одной фигуре в 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()

Но я получаю отдельные цифры с одним сюжетом один за другим. Может ли кто-нибудь помочь мне понять, что случилось с моим кодом? Почему я не могу создать многострочный график? Большое спасибо!

4b9b3361

Ответ 1

Это очень просто сделать:

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, вам нужно сначала указать цвет. Итак, для синего, это b. А для обычной строки это -. Примером может служить:

plt.plot(total_lengths, sort_times_heap, 'b-', label="Heap")

Ответ 2

Поскольку у меня недостаточно высокой репутации для комментариев, я отвечу на вопрос iang от 20 февраля в 10:01 в качестве ответа на исходный вопрос.

Чтобы для ярлыков линий отображалось, вам нужно добавить plt.legend к вашему коду. чтобы основываться на предыдущем примере выше, который также включает заголовок, ярлык и 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()

Ответ 3

РЕДАКТИРОВАТЬ. Я только что понял, прочитав ваш вопрос еще раз, что я не ответил на ваш вопрос. Вы хотите ввести несколько строк на одном и том же участке. Тем не менее, я оставлю это, потому что это послужило мне очень много раз. Надеюсь, что когда-нибудь вы сочтете полезным

Я нашел это некоторое время назад при изучении 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 для получения дополнительной справки и примеров. Это немного я набрал для себя один раз, и очень много основано/скопировано из документов. Надеюсь, это поможет... Я помню, что это была боль в # $%, чтобы познакомиться с нотой фрагмента для графиков разного размера на одной фигуре. После этого я думаю, что это очень просто:)