Створіть більше однієї діаграми в одній комірці IPython Notebook


87

Я запустив свій блокнот IPython з

ipython notebook --pylab inline

Це мій код в одній комірці

df['korisnika'].plot()
df['osiguranika'].plot()

Це працює нормально, він намалює дві лінії, але на тій самій діаграмі.

Я хотів би намалювати кожен рядок на окремій діаграмі. І було б чудово, якби таблиці стояли поруч, а не одна за одною.

Я знаю, що можу помістити другий рядок у наступну клітинку, і тоді я отримаю дві діаграми. Але я хотів би, щоб діаграми були близькі одна до одної, оскільки вони представляють одну і ту ж логічну одиницю.

Відповіді:


88

Спершу зробіть кілька осей і передайте їх до функції графіку Панд, наприклад:

fig, axs = plt.subplots(1,2)

df['korisnika'].plot(ax=axs[0])
df['osiguranika'].plot(ax=axs[1])

Це все одно дає вам 1 фігуру, але з двома різними графіками поруч один з одним.


3
Це працює. Тепер я не буду змінювати розмір зображення. Я можу це зробити за допомогою fig, axs = plt.subplots (1,2, figsize = (15, 5)). Чи є спосіб встановити розмір зображення в пікселях?
WebOrCode

1
Використання figsize - це справді спосіб, це розмір у дюймах. Скільки пікселів буде, залежить від dpi, який зафіксовано для відображення на екрані. Але для збереження його можна встановити, додавши ключове слово dpi.
Рутгер Кассіс,

2
Не зовсім точно, що dpi фіксується для відображення на екрані (ну так, і це ні). IPython відображає зображення, засновані виключно на їх розмірі пікселів, і цей розмір пікселів визначається в matplotlib шляхом множення розміру фігури в дюймах на savefig.dpiконфігурацію. Вбудовані фігури використовують той самий шлях savefig, що і запис файлів.
minrk

Дякую, що вказали на це, я не знав, що це працювало так. Чи не було б зручніше, якби враховувався (також) і dpi дисплея, оскільки це легко встановити при створенні фігури. Для savefig.dpi я не знаю іншого шляху, крім mpl.rcParams['savefig.dpi'] = 120. Для відображувального dpi є ключове слово у багатьох місцях, наприклад plt.figure(dpi=120), але це ігнорується зараз, отже, моє неправильне припущення про його виправлення.
Рутгер Кассіс,

101

Ви також можете викликати функцію show () після кожного сюжету. напр

   plt.plot(a)
   plt.show()
   plt.plot(b)
   plt.show()

1
Чудово, але як встановити розташування зображення сюжету, наприклад (2,2) або (1,2)?
Pythoner

3
При цьому варіанті сюжети обов’язково з’являються один за одним. Щоб отримати більше контролю над загальним макетом, pyplot.subplots()це шлях.
Eric O Lebigot,

1
Я видалив посилання.
Tooblippe

12

Щось на зразок цього:

import matplotlib.pyplot as plt
... code for plot 1 ...
plt.show()
... code for plot 2...
plt.show()

Зверніть увагу, що це також буде працювати, якщо ви використовуєте seabornпакет для побудови графіку:

import matplotlib.pyplot as plt
import seaborn as sns
sns.barplot(... code for plot 1 ...) # plot 1
plt.show()
sns.barplot(... code for plot 2 ...) # plot 2
plt.show()

11

Інший спосіб, для різноманітності. Хоча це дещо менш гнучко, ніж інші. На жаль, графіки з’являються одна над одною, а не поруч, що ви вимагали у своєму початковому запитанні. Але це дуже лаконічно.

df.plot(subplots=True)

Якщо dataframe має більше двох серій, і ви тільки хочете , щоб побудувати ці два, вам потрібно замінити dfз df[['korisnika','osiguranika']].


2

Я не знаю, чи це нова функціональність, але це буде зображено на окремих малюнках:

df.plot(y='korisnika')
df.plot(y='osiguranika')

в той час як це буде побудовано на тій самій фігурі: (так само, як код в операційній програмі)

df.plot(y=['korisnika','osiguranika'])

Я знайшов це запитання, оскільки використовував колишній метод, і хотів, щоб вони побудували графік на одній і тій же фігурі, тож ваше питання насправді було моєю відповіддю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.