使用分类数据和数值数据绘制 pandas 数据框的散点图

Plotting scatter plot of pandas dataframe with both categorical and numerical data

我正在尝试绘制以下类型的 pandas 数据框的散点图:

df = pd.DataFrame([['RH1', 1, 3], ['RH2', 0, 3], ['RH3', 2, 0], ['RH4', 1, 2], columns=['name', 'A', 'B'])

最终图应以“名称”列作为 Y 轴,以“A”和“B”作为 X 轴。并且不同的数值用不同的颜色表示。像这样的

我试图通过遍历数据帧的每一行来绘制它,但我卡在某个地方无法完成,我遇到的主要问题是两个轴的大小。如果有人能帮助我,那就太好了。提前谢谢你。

您可以 melt 您的数据框并将这些值用作颜色列:

from matplotlib import pyplot as plt
import pandas as pd

df = pd.DataFrame([['RH1', 1, 3], ['RH2', 0, 3], ['RH3', 2, 0], ['RH4', 1, 2]], columns=['name', 'A', 'B'])

df.melt(["name"]).plot(x="variable", y= "name", kind="scatter", c="value", cmap="plasma")
plt.show()

示例输出:

如果您的值数量有限,您可以将颜色图更改为 discrete colormap 并用其值标记每种颜色。或者,使用 seaborn 的 stripplot:

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

df = pd.DataFrame([['RH1', 1, 3], ['RH2', 0, 3], ['RH3', 2, 0], ['RH4', 1, 2]], columns=['name', 'A', 'B'])

sns.stripplot(data=df.melt(["name"]), x="variable", y= "name", hue="value", jitter=False)
plt.show()

输出: