散点图按weekday_num着色后,如何显示全部分类对应的图例?
散点图按weekday_num着色并显示对应图例的解决方法
你的需求是绘制count与max_temperature_C的散点图,按weekday_num字段区分颜色,但原代码的图例无法正确显示每个weekday_num对应的颜色——问题出在直接用c=comb2['weekday_num']会生成连续色阶,且plt.legend(['weekday_num'])仅添加了单一标签,无法对应每个类别。
下面提供两种可行的解决方法:
方法一:纯Matplotlib实现
通过循环每个weekday_num单独绘制数据点,让每个类别自动生成图例项:
import matplotlib.pyplot as plt # 获取并排序weekday_num的唯一值 weekday_values = comb2['weekday_num'].unique() weekday_values.sort() # 选择离散颜色映射,保证每个类别颜色区分度 color_map = plt.get_cmap('viridis', len(weekday_values)) # 循环绘制每个工作日的数据点 for num in weekday_values: # 筛选当前工作日的数据 subset = comb2[comb2['weekday_num'] == num] plt.scatter(subset['count'], subset['max_temperature_C'], color=color_map(num), label=f'工作日 {num}') # 设置坐标轴标签 plt.xlabel('每日出行次数') plt.ylabel('最高气温 (°C)') # 设置图例标题并显示 plt.legend(title='工作日编号') plt.show()
方法二:用Seaborn简化代码
Seaborn的scatterplot可以直接通过hue参数实现按字段着色并自动生成对应图例,代码更简洁:
import seaborn as sns import matplotlib.pyplot as plt sns.scatterplot(data=comb2, x='count', y='max_temperature_C', hue='weekday_num', palette='viridis') plt.xlabel('每日出行次数') plt.ylabel('最高气温 (°C)') plt.legend(title='工作日编号') plt.show()
内容的提问来源于stack exchange,提问作者Senners
相关产品推荐
相关产品推荐

