Сгруппированный точечный график с цветовой шкалой через интерфейс построения панд - PullRequest
0 голосов
/ 08 января 2019

Когда я строю сгруппированный точечный график из панд (как описано в документации ), где вторая группа должна содержать цветную полосу, я получаю ошибку TypeError: You must first set_array for mappable.

Следуя другим, но различным вопросам для разгруппированных диаграмм разброса , это потому, что cmap используется только в том случае, если c является массивом чисел с плавающей запятой. Но автономно он работает отлично, и данные не обрабатываются между созданием двух осей-объектов.

Вот код, который я использую:

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

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

# this works stand-alone
#df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues')

# why does this break?
ax = df.plot(kind='scatter', x='D', y='E', color='red', label='Other group')
df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', ax=ax)
plt.show()

Обе группы должны отображаться на одном графике. Обратите внимание, что для меня важно построить столбцы D и E, прежде чем наносить на них A, B и C, поэтому последние должны быть на втором графике. Наоборот, это работает, но для моих требований это ломается.

Кто-нибудь знает, как это исправить и получить желаемый результат?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Кажется, панды не понимают, как создать цветную панель внутри. У вас всегда есть возможность создать цветовую панель с помощью matplotlib.

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

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

ax = df.plot(kind='scatter', x='D', y='E', color='red', label='Other group')
df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', ax=ax, colorbar=False)
ax.figure.colorbar(ax.collections[1])   # Note the index 1, which stands
                                        # for second scatter in the axes.
plt.show()

enter image description here

0 голосов
/ 08 января 2019

В обратном порядке вы заговор. Я думаю, что цветовой бар запутывается, к какой диаграмме применить. Следовательно, мы пытаемся сделать сначала график с цветной полосой, а затем применить красный разброс сверху.

df = pd.DataFrame(np.random.rand(100, 5), columns=['A', 'B', 'C', 'D', 'E'])

# this works stand-alone
#df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues')

# why does this break?
# ax = df.plot(kind='scatter', x='D', y='E', color='red', abel='Other group')
ax = df.plot(kind='scatter', x='A', y='B', c='C', cmap='Blues', zorder=10)
df.plot(kind='scatter', x='D', y='E', color='red', label='Other group', ax=ax, zorder=1)
plt.show()

Выход:

enter image description here

С zorder:

enter image description here

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