You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Matplotlib多温度散点图设置不同颜色与独立图例?

解决多组散点图颜色单一、图例重复问题

直接给你针对性的修改方案和代码示例:

核心问题分析

  1. 所有散点蓝色:循环绘制时未指定不同颜色,默认使用Matplotlib的初始配色
  2. 图例重复:每次循环都调用legend(),或图例标签未正确关联每组数据

修改步骤与代码示例

1. 准备颜色集合

用Matplotlib内置的配色方案(比如tab10,适合10组以内的分类),或者自定义颜色列表,确保每组数据对应不同颜色。

2. 循环绘制时绑定颜色与标签

循环遍历每个温度分组,用索引匹配颜色,同时给每组散点设置唯一标签,最后统一添加图例(只调用一次)。

完整修改代码(含Tkinter文件选择)

import pandas as pd
import matplotlib.pyplot as plt
from tkinter import Tk, filedialog

# 弹出文件选择框读取Excel
root = Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[("Excel文件", "*.xlsx;*.xls")])
df = pd.read_excel(file_path)

# 获取所有唯一温度值
unique_temps = df['温度'].unique()
# 用Matplotlib内置的tab10配色,自动生成区分度高的颜色
color_list = plt.cm.tab10.colors

# 创建画布
plt.figure(figsize=(10, 6))
# 遍历每个温度分组,用索引对应颜色
for idx, temp in enumerate(unique_temps):
    # 筛选当前温度的数据
    temp_data = df[df['温度'] == temp]
    # 绘制散点:指定颜色、设置对应标签
    plt.scatter(temp_data['X列名'], temp_data['Y列名'], 
                color=color_list[idx % len(color_list)],  # 颜色循环避免越界
                label=f"{temp}℃")

# 循环结束后统一添加一次图例
plt.legend(title="温度分组", loc="upper right")
# 添加坐标轴标签和标题
plt.xlabel("X轴名称")
plt.ylabel("Y轴名称")
plt.title("不同温度下的散点分布")
plt.show()

嵌入Tkinter窗口的版本(如果你的代码是在GUI里显示)

import pandas as pd
import matplotlib.pyplot as plt
from tkinter import Tk, filedialog
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

root = Tk()
root.title("温度散点图")

# 读取Excel数据
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[("Excel文件", "*.xlsx;*.xls")])
df = pd.read_excel(file_path)
root.deiconify()

unique_temps = df['温度'].unique()
color_list = plt.cm.tab10.colors

# 创建Matplotlib图和轴
fig, ax = plt.subplots(figsize=(10, 6))
for idx, temp in enumerate(unique_temps):
    temp_data = df[df['温度'] == temp]
    ax.scatter(temp_data['X列名'], temp_data['Y列名'],
               color=color_list[idx % len(color_list)],
               label=f"{temp}℃")

# 设置图例和标签
ax.legend(title="温度分组")
ax.set_xlabel("X轴名称")
ax.set_ylabel("Y轴名称")
ax.set_title("不同温度下的散点分布")

# 把图嵌入Tkinter窗口
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(fill="both", expand=True)

root.mainloop()

关键注意点

  • 替换代码中的X列名、Y列名为你Excel里实际的列标题
  • 如果温度分组超过10个,可换用tab20配色(plt.cm.tab20.colors),或者自定义颜色列表(比如color_list = ['#FF5733', '#33FF57', '#3357FF', ...])
  • 绝对不要在循环内部调用legend(),否则会重复生成图例

内容的提问来源于stack exchange,提问作者Mhmoud Khadija

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:20:33