我有一个有3列的数据帧。我想在x轴上绘制col1,在y轴上绘制col2和col3。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
我想要:
A)每个人在x轴上只出现一次
B)保持所有高度为一种颜色,所有重量为另一种颜色,具有准确、不重复的图例
到目前为止,我只能得到A或B,而不是两者都有。下面是我正在尝试的内容和输出。对于A,这很有帮助(Python Scatter Plot with Multiple Y values for each X)
对于A:
^{pr2}$对于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()
一个简单的选项是直接使用matplotlib打印,而不是使用熊猫.DataFrame.plot方法。为了使解决方案独立于列数和行数等,可以将“name”列设置为index。不需要在列上循环。因此,代码将是:
从而产生:
另一种方法是调整选项B,将字符串值(不用于绘图,而是索引,这就是它们不在同一位置的原因)替换为整数值。
^{pr2}$为了得到一个好的映射,在删除重复项后使用索引和名称之间的反向映射,对于ticks和ticklabels,也使用相同的值。
请注意,替换是在绘图之前执行的,并且它不会被存储,因此,
DF
不会被修改。生成的绘图如下:
因为有2列,所以可以绘制2个散点图,每个散点图都有自己的标签。
有更多的列,你当然可以循环它们
^{pr2}$相关问题 更多 >
编程相关推荐