аргумент sharey = 'all' в plt.subplots () не передан в df.plot ()? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть фрейм данных pandas, который я хотел бы нарезать, и нанести каждый срез на отдельный субплот. Я хотел бы использовать sharey='all' и сделать так, чтобы matplotlib определился с некоторыми разумными пределами оси Y, вместо того, чтобы искать в кадре данных минимальное и максимальное значения и добавлять смещения.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()

fig, axes = plt.subplots(nrows=0,ncols=0, sharey='all', tight_layout=True)

for i in range(1, len(df.columns) + 1):
    ax = fig.add_subplot(2,3,i)    
    iC = df.iloc[:, i-1]
    iC.plot(ax=ax) 

Что дает следующий сюжет:
enter image description here

Фактически, это дает это независимо от того, что я указываю sharey, чтобы быть ('all', 'col', 'row', True или False). То, что я искал после использования sharey='all', будет примерно таким: enter image description here

Может кто-нибудь объяснить мне, что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Следующая версия добавит только те оси, которые вам нужны для ваших df-столбцов, и поделится их y-шкалами:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()

fig = plt.figure(tight_layout=True)

ref_ax = None
for i in range(len(df.columns)):
    ax = fig.add_subplot(2, 3, i+1, sharey=ref_ax)
    ref_ax=ax
    iC = df.iloc[:, i]
    iC.plot(ax=ax) 

plt.show()

Параметры сетки, которые здесь явно заданы как ...add_subplot(2, 3, ..., конечно, могут быть рассчитаны относительно len(df.columns).

0 голосов
/ 03 мая 2018

Ваши участки не являются общими. Вы создаете сетку вложенных участков с 0 строками и 0 столбцами, то есть вообще без вложенных участков, но эти несуществующие вспомогательные участки имеют общие оси y. Затем вы создаете некоторые другие (существующие) подсюжеты, которые не являются общими. Это те, которые планируются для.

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.arange(50).reshape((5,10))).transpose()

fig, axes = plt.subplots(nrows=2,ncols=3, sharey='all', tight_layout=True)

for i, ax in zip(range(len(df.columns)), axes.flat):
    iC = df.iloc[:, i]
    iC.plot(ax=ax) 

for j in range(len(df.columns),len(axes.flat)):
    axes.flatten()[j].axis("off")

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...