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

如何用Matplotlib绘制元组列表的双系列折线与散点图?

解决Matplotlib散点图同时显示多组数据的问题

问题核心在于plt.plot和plt.scatter的参数接收逻辑不同:

  • plt.plot支持同时传入多组x-y数据对(比如plt.plot(x1,y1,x2,y2)),所以*zip(*lista)拆分出的x, y1, y2会被自动识别为两组数据,生成两条折线。
  • 但plt.scatter仅接受一组x坐标、一组y坐标,后续传入的参数会被解析为点的大小、颜色等属性(你代码里的y2被当成了点的大小参数s,所以只显示了第一组点,点的大小对应y2的值)。

解决方法

方法1:拆分数据后分别绘制

直接拆分出x轴和两组y值,分别调用plt.scatter,还可以自定义样式区分不同组:

import matplotlib.pyplot as plt
import numpy as np

lista = [(0,1,3),(1,4,5),(2,0,2),(3,5,10),(4,3,7)]
# 拆分出x轴、第一组y值、第二组y值
x, y1, y2 = zip(*lista)

plt.scatter(x, y1, color='blue', marker='o', label='Group 1')
plt.scatter(x, y2, color='red', marker='s', label='Group 2')

# 添加图例方便区分
plt.legend()
plt.show()

方法2:循环批量处理(适合多组数据场景)

如果后续需要处理更多组数据,用循环批量绘制更高效:

import matplotlib.pyplot as plt
import numpy as np

lista = [(0,1,3),(1,4,5),(2,0,2),(3,5,10),(4,3,7)]
data = list(zip(*lista))
x = data[0]
y_groups = data[1:]  # 提取所有y组数据

# 自定义样式循环绘制
colors = ['blue', 'red']
markers = ['o', 's']
for i, y in enumerate(y_groups):
    plt.scatter(x, y, color=colors[i], marker=markers[i], label=f'Group {i+1}')

plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:55:15