#python #matplotlib #pandas #scatter
#python #matplotlib #панды #разброс
Вопрос:
Я создаю диаграммы рассеяния из DF, используя matplotlib. Чтобы получить разные цвета для каждого набора данных, я делаю два отдельных вызова plt.scatter:
plt.scatter(zzz['HFmV'], zzz['LFmV'], label = dut_groups[0], color = 'r' )
plt.scatter(qqq['HFmV'], qqq['LFmV'], label = dut_groups[1], color = 'b' )
plt.legend()
plt.show()
Это дает мне желаемую цветовую зависимость, но на самом деле было бы идеально, если бы я мог просто заставить pandas предоставить мне диаграмму рассеяния с несколькими наборами данных на одном графике чем-то вроде
df.plot(kind = scatter(x, y, color = df.Group, marker = df.Head)
По-видимому, такого животного нет (по крайней мере, я смог найти). Итак, следующим лучшим решением, на мой взгляд, было бы поместить вызовы plt.scatter в цикл, где я мог бы изменить цвет или маркер в зависимости от одной из строк (не x или y, а какой-то другой строки. Если строка, которую я хочу использовать, была непрерывной переменной, похоже, я мог бы использовать цветовую карту, но в моем случае строка, которую мне нужно подать в суд на это, является строкой (категориальный тип переменной, а не число).
Любая помощь приветствуется.
Ответ №1:
То, что вы делаете, почти сработает, но вам нужно передать color
вектор цветов, а не только вектор переменных. Итак, вы могли бы сделать:
color = df.Group.map({dut_groups[0]: "r", dut_groups[1]: "b"})
plt.scatter(x, y, color=color)
То же самое касается стиля маркера
Вы также можете использовать seaborn для отображения цветов так, как вы ожидаете (как обсуждалось здесь ), хотя он не выполняет отображение стиля маркера:
import seaborn as sns
import pandas as pd
from numpy.random import randn
data = pd.DataFrame(dict(x=randn(40), y=randn(40), g=["a", "b"] * 20))
sns.lmplot("x", "y", hue="g", data=data, fit_reg=False)