У меня есть датафрейм с 3 столбцами. Я хотел бы построить col1 на оси x с col2 и col3 на оси y. Col1 имеет повторяющиеся значения, поэтому для каждого значения x есть повторяющиеся значения y.
Пример кадра данных:
DF = pd.DataFrame({"name": ["Alice", "Alice", "Charles", "Charles", "Kumar", "Kumar"],
"height": [124, 126, 169, 170, 175, 174],
"weight": [100, 105, 123, 125, 139, 140]})
DF
name height weight
0 Alice 124 100
1 Alice 126 105
2 Charles 169 123
3 Charles 170 125
4 Kumar 175 139
5 Kumar 174 140
Я хочу:
А) каждый человек встречается только один раз по оси х
B) сохранить все высоты одним цветом, а все веса - другим цветом с точной неповторяющейся легендой
Пока что я могу получить либо А, либо В, но не оба. Ниже то, что я пытаюсь и вывод. Для A это было полезно ( Диаграмма рассеяния Python с несколькими значениями Y для каждого X )
Для A:
f = DF.groupby("name", as_index=False).agg({"height":lambda x: tuple(x), "weight":lambda x: tuple(x)})
for x, (y1, y2) in enumerate(zip(f.height.values.tolist(), f.weight.values.tolist()), start=1):
plt.scatter([x] * len(y1), y1, color='green', marker='o', label="height")
plt.scatter([x] * len(y2), y2, color='blue', marker='o', label="weight")
plt.xticks(np.arange(1, len(f.name.values) +1))
plt.axes().set_xticklabels(f.name.values.tolist())
plt.legend(loc="best")
plt.show()
Для B:
ax = DF.plot(style="o", figsize=(7, 5), xlim=(-1, 6))
ax.set_xticks(DF.index)
ax.set_xticklabels(DF.name, rotation=90)
plt.show()
![enter image description here](https://i.stack.imgur.com/ibfdt.png)
![enter image description here](https://i.stack.imgur.com/KGuUO.png)