#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')
Смотрите Документы