Я пытаюсь построить график Matplotlib с цветами в соответствии с именами в панде DataFrame. При этом на графике x, y разные точки имени имеют разный цвет.
Dataframe :
id x y Names
0 MAC004524 29.137983 11.864633 ACORN-M
1 MAC004525 28.14 11.80 ACORN-M
2 MAC004526 24.14 12.80 ACORN-C
....
Код:
names = set(df['Names'])
colors = list(cmap(np.linspace(0, 1, len(names))))
df['color']=0
for a, c in zip(names, colors):
mask = df.loc[df['Names'] == a]
df.loc[mask, 'color'] = c
#but get an error here KeyError: "[('i', 'd') ('x',) ('y',) ('A', 'c', 'o', 'r', 'n')\n ('A', 'c', 'o', 'r', 'n', '_', 'g', 'r', 'o', 'u', 'p', 'e', 'd')\n ('c', 'o', 'l', 'o', 'r')] not in index"
Тогда я хотел бы построить
x = df['x']
y = df['y']
c= df['color']
plt.scatter(x, y, c=c, s=1)
Требуется df:
id x y Names color
0 MAC004524 29.137983 11.864633 ACORN-M [0.267004 0.004874 0.329415 1. ]
2 ответа
Вы смотрели на морские заговоры? Вы можете сразу создать сюжет из исходного кадра данных:
import seaborn as sns
sns.scatterplot(x='x', y='y', hue='Names', data=df)
Проблема должна заключаться в попытке разместить список в ячейке. Как показано здесь, вам следует использовать .at вместо .loc.
Вероятно, не самый эффективный способ, но он выполняет свою работу:
for a, c in zip(names, colors):
mask = df[df['Names'] == a].index
for value in mask:
df.at[value, 'color'] = c
Я добавил индекс и перебрал каждое его значение, чтобы заменить его указанным цветом, так как мне еще предстоит найти способ добавить более одного значения в индекс строки команды .at.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.