如何根据DataFrame列值设置matplotlib散点图颜色及对应图例标签
问题原因
现有代码一次性调用plt.scatter绘制全量数据,Matplotlib默认将单次绘制的所有散点归为同一个图例条目,无法自动把传入的标签元组拆分对应两类取值的散点,因此图例显示异常。
解决方法
按waterfront的取值拆分数据,分别调用plt.scatter绘制不同类别的散点,各自指定颜色和标签即可,修正后的代码如下:
import pandas as pd import matplotlib.pyplot as plt d = {'long': [1, 2], 'lat': [3, 4], 'waterfront': [0, 1]} df = pd.DataFrame(data=d) colors = {0:'tab:blue', 1:'tab:red'} label_map = {0: 'Without Waterfront', 1: 'With Waterfront'} # 遍历不同类别分别绘图 for val in [0, 1]: curr_df = df[df['waterfront'] == val] plt.scatter(curr_df['long'], curr_df['lat'], c=colors[val], zorder=3, label=label_map[val]) plt.xlabel("Longitude") plt.ylabel("Latitude") plt.title("Longitude versus Latitude") plt.grid(zorder=0) plt.legend() plt.show()
该方法对多类别场景也通用,新增类别只需扩展colors和label_map的映射即可。
内容的提问来源于stack exchange,提问作者Ceiun
相关产品推荐
相关产品推荐

