Проблема с построением графиков в 1 строке с использованием метода построения графиков от панд - PullRequest
0 голосов
/ 02 февраля 2019

Предположим, я хочу построить 3 графика в 1 строке: зависимости cnt от других 3 функций.

Код:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10))
for idx, feature in enumerate(min_regressors):
    df_shuffled.plot(feature, "cnt", subplots=True, kind="scatter", ax= axes[0, idx])
plt.show()

Ошибкасообщение:

IndexErrorTraceback (most recent call last)
<ipython-input-697-e15bcbeccfad> in <module>()
      2 fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10))
      3 for idx, feature in enumerate(min_regressors):
----> 4     df_shuffled.plot(feature, "cnt", subplots=True, kind="scatter", ax= axes[0, idx])
      5 plt.show()

IndexError: too many indices for array

Но все нормально, когда я строю график в (2,2) измерении:

Код:

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(15, 10))
for idx, feature in enumerate(min_regressors):
    df_shuffled.plot(feature, "cnt", subplots=True, kind="scatter", ax= axes[idx / 2, idx % 2])
plt.show()

Вывод:

enter image description here

Я использую python 2.7

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Чтобы вы могли узнать и понять, что происходит, я предлагаю вам проверить размер axes в обеих этих ситуациях.Вы увидите, что когда nrows или ncols равно 1, переменная оси будет 1-мерной, в противном случае она будет 2-мерной.

Вы не можете индексировать 1-мерный объект так, каквы делаете (ax= axes[0, idx]).

То, что вы можете сделать, это использовать numpy's atleast_2d , чтобы сделать оси 2D.

В качестве альтернативы, лучшим решением было бы перебирать элементы и оси напрямую:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10))
for ax, feature in zip(axes, min_regressors):
    df_shuffled.plot(feature, "cnt", subplots=True, kind="scatter", ax=ax)
plt.show()
0 голосов
/ 02 февраля 2019

Проблема не связана с пандами.Ошибка индекса, которую вы видите, исходит от ax= axes[0, idx].Это потому, что у вас есть один ряд.[0, idx] будет работать, если у вас более одной строки.

Только для одной строки вы можете пропустить первый индекс и использовать

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 10))
for idx, feature in enumerate(min_regressors):
    df_shuffled.plot(feature, "cnt", subplots=True, kind="scatter", ax= axes[idx])
plt.show()

В качестве резюме

Правильно

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(8, 3))
axes[0].plot([1,2], [1,2])

Неверно

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(8, 3))
axes[0, 0].plot([1,2], [1,2])

Правильно

fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(8, 3))
axes[0,0].plot([1,2], [1,2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...