如何根据第三列作为图例绘制x、y坐标列的散点图
按DataFrame类别列设置散点图颜色的解决方案
你之前尝试的两种方法都无法实现按type列着色的原因:
- 第一种方法中,
plt.scatter一次性绘制所有点,没有区分不同类别的颜色,plt.legend(df["type"])会错误地将每个数据点都作为图例项,完全不符合需求。 - 第二种方法里,
df.plot.scatter的legend参数仅控制是否显示图例,不支持按指定列分组着色,因此无法达到按类别区分颜色的效果。
下面提供三种可行的解决方案:
方法1:Matplotlib手动分组绘制
先筛选出不同类别的数据子集,分别调用scatter绘制并指定颜色,最后添加图例:
import pandas as pd import matplotlib.pyplot as plt data = {"x" : [1, 2, 3, 4, 5], "y" : [1, 2, 3, 4, 5], "type" : ["one", "one", "one", "two", "two"]} df = pd.DataFrame(data) # 筛选两类数据 group_one = df[df["type"] == "one"] group_two = df[df["type"] == "two"] # 分别绘制散点并设置颜色、标签 plt.scatter(group_one["x"], group_one["y"], color="blue", label="one") plt.scatter(group_two["x"], group_two["y"], color="red", label="two") plt.legend() plt.xlabel("x") plt.ylabel("y") plt.show()
方法2:Seaborn快速实现(推荐)
Seaborn的scatterplot支持通过hue参数直接指定分组列,自动完成颜色区分和图例添加,代码更简洁:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt data = {"x" : [1, 2, 3, 4, 5], "y" : [1, 2, 3, 4, 5], "type" : ["one", "one", "one", "two", "two"]} df = pd.DataFrame(data) sns.scatterplot(data=df, x="x", y="y", hue="type") plt.show()
方法3:Pandas分组遍历绘图
利用groupby对DataFrame按type分组,遍历每个分组并指定对应颜色绘制:
import pandas as pd import matplotlib.pyplot as plt data = {"x" : [1, 2, 3, 4, 5], "y" : [1, 2, 3, 4, 5], "type" : ["one", "one", "one", "two", "two"]} df = pd.DataFrame(data) # 定义类别与颜色的映射关系 color_map = {"one": "#2ecc71", "two": "#e74c3c"} # 遍历每个分组绘制散点 for type_name, group_data in df.groupby("type"): plt.scatter(group_data["x"], group_data["y"], color=color_map[type_name], label=type_name) plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者eh329
相关产品推荐
相关产品推荐

