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

如何基于x、y坐标绘制对应z值的散点图/折线图?

实现x-y坐标对应z值的散点图/折线图

前提说明

你的数据中,z的元素是按x的每个元素依次对应y的所有元素排列的(即先遍历x=0时的所有y,再x=1时的所有y,以此类推),所以首先需要生成与z一一对应的(x,y)坐标对,再基于这些坐标绘图。


方法1:绘制散点图

散点图可以直观展示每个(x,y)位置对应的z值,通过颜色或大小区分z的数值差异。

代码实现(使用NumPy简化坐标生成)

import numpy as np
import matplotlib.pyplot as plt

# 定义原始数据
x = [0, 1, 2, 3, 4]
y = [0, 1, 2, 3]
z = [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

# 生成匹配z顺序的网格坐标:indexing='ij'确保先遍历x,再遍历y
X, Y = np.meshgrid(x, y, indexing='ij')
# 将二维网格展平为一维数组,与z的长度匹配
X_flat = X.flatten()
Y_flat = Y.flatten()

# 绘制散点图:用z值控制点的颜色,添加颜色条说明
plt.scatter(X_flat, Y_flat, c=z, s=120, cmap='viridis')
plt.colorbar(label='z值')
plt.xlabel('x')
plt.ylabel('y')
plt.title('x-y坐标对应z值的散点图')
plt.show()

无NumPy的手动实现

如果不想用NumPy,可以手动生成坐标对:

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 2, 3]
z = [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

# 手动生成与z顺序一致的(x,y)坐标对
coords = [(xi, yj) for xi in x for yj in y]
X_flat = [p[0] for p in coords]
Y_flat = [p[1] for p in coords]

plt.scatter(X_flat, Y_flat, c=z, s=120, cmap='viridis')
plt.colorbar(label='z值')
plt.xlabel('x')
plt.ylabel('y')
plt.title('x-y坐标对应z值的散点图')
plt.show()

方法2:绘制折线图

折线图适合展示同一x(或同一y)下,z随另一变量的变化趋势,通常需要按维度分组绘制。

按x分组绘制(每个x对应一条y-z折线)

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 2, 3]
z = [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

fig, ax = plt.subplots()
y_len = len(y)

# 遍历每个x值,提取对应y和z的片段绘制折线
for idx, xi in enumerate(x):
    start = idx * y_len
    end = start + y_len
    current_z = z[start:end]
    ax.plot(y, current_z, marker='o', linewidth=2, label=f'x={xi}')

ax.set_xlabel('y')
ax.set_ylabel('z')
ax.set_title('不同x值下y与z的折线图')
ax.legend()
plt.show()

按y分组绘制(每个y对应一条x-z折线)

如果想观察同一y下z随x的变化,只需调整分组逻辑:

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4]
y = [0, 1, 2, 3]
z = [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]

fig, ax = plt.subplots()
x_len = len(x)

# 遍历每个y值,提取对应x和z的片段绘制折线
for idx, yj in enumerate(y):
    # z中对应y=yj的元素是每隔x_len取一个
    current_z = z[idx::x_len]
    ax.plot(x, current_z, marker='s', linewidth=2, label=f'y={yj}')

ax.set_xlabel('x')
ax.set_ylabel('z')
ax.set_title('不同y值下x与z的折线图')
ax.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:53:14