2016-10-08 8 views
2

я могу построить данные из файла CSV с помощью следующего кода:Как модули знают друг друга

import pandas as pd 
import matplotlib.pyplot as plt 
df = pd.read_csv('test0.csv',delimiter='; ', engine='python') 
df.plot(x='Column1', y='Column3') 
plt.show() 

Но я не понимаю одну вещь. Как? plt.show() знает где? df? Я больше смысла для меня видеть, где-то, такое выражение:

plt = something(df) 

Я должен упомянуть, я только учусь Python.

+0

В основном 'df' также импортирует' plt' и модифицирует это прямо. 'plt' использует много глобального состояния, которое доступно пользователям и коду. – MisterMiyagi

ответ

2

Из панд Документов на plotting:

Способ по серии и DataFrame plot это простая обертка вокруг: мет: plt.plot() <matplotlib.axes.Axes.plot>

Так как есть, метод является высокий уровень звонка до plt.plot (с использованием обертки ), и после этого вызов plt.show будет просто:

дисплея все цифры и блок до цифры были закрыты

как это было бы с на все цифры нанесены с plt.plot.


Таким образом, вы не видите plt = something(df), как и следовало ожидать, потому что matpotlib.pyplot.plot вызывается за сценой по .

+1

Я понял. Но я хотел бы спросить, есть ли способ написать код, чтобы магия стала более явной? – KcFnMi

+0

@KcFnMi Я не думаю, что вам нужна явная магия. Эта оболочка избавляет нас от необходимости передавать необходимые аргументы и kwargs в 'plt.plot', как это требуется для иногда сложных фреймов данных. –

1

Согласно http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.show, plt.show() сам по себе не знает никаких данных, вам необходимо передать данные в виде параметров.

Что вы видите, должен быть сюжет библиотеки панд, в соответствии с использованием http://pandas.pydata.org/pandas-docs/stable/visualization.html#basic-plotting-plot.

Надеюсь, что решает вопрос.

3

Matplotlib имеет два «интерфейса»: a Matlab-style interface и object-oriented interface.

Заговора с интерфейсом Matlab-стиль выглядит следующим образом:

import matplotlib.pyplot as plt 
plt.plot(x, y) 
plt.show() 

Вызов plt.plot неявно создает деятель и оси, на которых можно рисовать. Вызов plt.show отображает все цифры.

Pandas поддерживает интерфейс в стиле Matlab, неявно создавая фигуру и оси для вас, когда вызывается df.plot(x='Column1', y='Column3').

Панды также может использовать более гибкий объектно-ориентированный интерфейс, в этом случае ваш код будет выглядеть следующим образом:

import pandas as pd 
import matplotlib.pyplot as plt 
df = pd.read_csv('test0.csv',delimiter='; ', engine='python') 
fig, ax = plt.subplots() 
df.plot(ax=ax, x='Column1', y='Column3') 
plt.show() 

Здесь оси, ax, явно создается и передается , который затем звонки ax.plot под капотом.

Один случай, когда объектно-ориентированный интерфейс полезен, когда вы хотите использовать более чем один раз в то же время, опираясь на те же оси:

fig, ax = plt.subplots() 
df.plot(ax=ax, x='Column1', y='Column3') 
df2.plot(ax=ax, x='Column2', y='Column4') 
plt.show() 
+0

В чем смысл 'fig, ax = plt.subplots()'? Я ожидал только одну вещь с левой стороны. – KcFnMi

+0

Фигура отвечает за отображение всего изображения. Оси отвечают за область печати. Цифра может содержать много осей. См. Http://stackoverflow.com/a/14846126/190597 для получения дополнительной информации о том, как организована иерархия объектов matplotlib. – unutbu

+1

@KcFnMi 'plt.subplots' возвращает два объекта, которые могут быть назначены одному имени для создания кортежа или назначены двум именам отдельно. – MisterMiyagi

Смежные вопросы