Несколько графиков на одном рисунке в Python

#python

#python #matplotlib #график

Вопрос:

Я новичок в 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()
  

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

Ответ №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")
  

Комментарии:

1. Вы можете получить дополнительную информацию здесь -> matplotlib.org/users/pyplot_tutorial.html

2. @liang, вы должны включить легенду. Я отредактировал ответ так, чтобы также отображались метки.

Ответ №2:

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

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

Ответ №3:

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

Я обнаружил это некоторое время назад, когда изучал python

 import matplotlib.pyplot 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
  

обратитесь к документации для получения дополнительной справки и примеров. Это немного, которое я набрал для себя один раз, и оно также во многом основано / скопировано из документов. Надеюсь, это поможет… Я помню, что было сложно в # $% ознакомиться с обозначением среза для графиков разного размера на одном рисунке. После этого я думаю, что это очень просто 🙂

Ответ №4:

Если вы работаете с Pandas, это очень легко сделать. Например:

 df = pd.DataFrame({'A': [1, 2, 3], 'B': [2, 2, 2]})
df.plot(kind='line')
  

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

Смотрите Документы