Покажите участки морского побережья в некоторый момент позже в коде - PullRequest
0 голосов
/ 17 февраля 2020

Скажем, в какой-то момент в моем коде у меня есть два следующих графика: т.е. graph_p_changes и graph_p_contrib

line_grapgh_p_changes = df_p_change[['year','interest accrued', 'trade debts', 'other financial assets']].melt('year', var_name='variables',  value_name='p_changes')
graph_p_changes = sns.factorplot(x="year", y="p_changes", hue='variables', data=line_grapgh_p_changes, height=5, aspect=2)
graph_p_changes.set(xlabel='year', ylabel='percentage change in self value across the years')

line_grapgh_p_contrib = df_p_contrib[['year','interest accrued', 'trade debts', 'other financial assets']].melt('year', var_name='variables',  value_name='p_changes')
graph_p_contrib = sns.factorplot(x="year", y="p_changes", hue='variables', data=line_grapgh_p_contrib, height=5, aspect=2)
graph_p_contrib.set(xlabel='year', ylabel='percentage chnage in contribution to total value')

Теперь, в какой-то момент позже в моем коде я просто хочу отобразить один из двух приведенных выше графики. Но когда я делаю plt.show (), он отображает оба приведенных выше графика в моем блокноте jupyter. Как я могу отобразить только один график в любой точке моего кода.

1 Ответ

2 голосов
/ 17 февраля 2020

Вы захотите обратиться к назначенной переменной для каждого графика, а затем добавить .fig после этого, чтобы снова отобразить ее в ячейке блокнота Jupyter.

В частности, в вашем случае вы бы указали graph_p_changes.fig или graph_p_contrib.fig в ячейке и выполнили бы эту ячейку, чтобы снова увидеть отдельный график.

Это похоже на то, как вы можете показать CabterGrids Seaborn снова, см. здесь . Поскольку заголовок вашего вопроса гласил «графики морского волка», я добавлю для полноты картины, это не касается таких графиков, как линейный график Сиборна (lineplot) или гистограмма (barplot), которые дают AxesSubplot объекты. Там вы используете .figure, например, ax.figure, чтобы вызвать большинство примеров, перечисленных в Документация линейного графика Seaborn .


Пример catplotts с кодом

This использует пример кода из здесь и документации по catblot seaborn (см. ниже) для создания двух графиков. Если бы этот код находился в одной ячейке, а затем эта ячейка была запущена, вы бы увидели два графика в выходных данных под ним.

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

titanic = sns.load_dataset("titanic")
exercise = sns.load_dataset("exercise")
g = sns.catplot("alive", col="deck", 
                col_wrap=3, data=titanic[titanic.deck.notnull()], 
                kind="count", height=2.5, aspect=.8)

another_plot = sns.catplot(x="time", y="pulse", hue="kind", data=exercise)

Позже каждый из них может быть снова отображен отдельно в виде вывода других ячеек с g.fig или another_plot.fig, в зависимости от того, какой график вы хотите показать.


Кроме того, я предложу улучшить жизнеспособность вашего долгосрочного кода, вы можете перейти к использованию catplot в ваших графических вызовах, как это factorplot теперь называется в Seaborn. См. здесь , где говорится, что «factorplot все еще существует и передаст свои аргументы в catplot () с предупреждением. В конечном итоге он может быть удален, но переход будет настолько постепенным, насколько это возможно».

ОБНОВЛЕНИЕ:

ОП отметил, что необходим код, позволяющий выводить stdout / stderr с вкраплениями с графиками в точных точках этого потока, а не только в конце.

По какой-то причине сюжеты Seaborn (даже простые линейные сюжеты), похоже, не «правильно» захватываются с помощью io.capture_output(), и поэтому мне пришлось использовать команду %%capture cell magi c в производящую ячейку и объединяем выход в отдельную ячейку. Тем не менее, графики Plotly, которые я пробовал на основе примера кода , фиксируются io.capture_output() и позволяют поверхностно смешивать все в одной и той же ячейке. Это все проиллюстрировано на примере записной книжки здесь ; Лучше всего просматривать в stati c form здесь , поскольку Github не отображает графики Plotly, в то время как nbviewer делает. В верхней части этой записной книжки находится ссылка, по которой вы можете запустить активную сессию Jupyter, где она будет работать.

...