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

如何用Matplotlib以矩阵配色形式绘制三列数据散点图?

问题分析与修正方案

你的代码存在几个关键问题导致无法实现需求:

  • 初始定义的colors是彩色字符串列表,但后续循环中添加的是数字,类型混合导致scatter无法正确识别颜色
  • 条件判断逻辑错误:两个if是独立判断,会导致部分z值被重复匹配;同时边界值(如i=9、i=25)未被正确归类
  • 没有使用灰度配色,不符合你要的"不同灰度矩阵形式"需求

以下是修正后的代码,实现基于z值区间的灰度配色:

import numpy as np
import matplotlib.pyplot as plt

# 读取数据
db = np.loadtxt('text.txt')
x = db[:, 0]
y = db[:, 1]
z = db[:, 2]

# 定义三个灰度区间对应的颜色(从浅到深)
gray_colors = ['#cccccc', '#888888', '#333333']
# 根据z值生成对应的颜色列表
point_colors = []
for val in z:
    if val < 9:
        point_colors.append(gray_colors[0])
    elif 9 <= val < 25:
        point_colors.append(gray_colors[1])
    else:
        point_colors.append(gray_colors[2])

# 绘制散点图
plt.scatter(x, y, c=point_colors, s=100)  # s参数可调整点的大小
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.title('基于Z值的灰度配色散点图')
plt.show()

更简洁的numpy实现方式

如果数据量较大,用numpy的向量化操作代替循环效率更高:

import numpy as np
import matplotlib.pyplot as plt

db = np.loadtxt('text.txt')
x, y, z = db[:,0], db[:,1], db[:,2]

# 定义灰度颜色
gray_colors = np.array(['#cccccc', '#888888', '#333333'])
# 根据z值生成索引
color_indices = np.where(z < 9, 0, np.where((9 <= z) & (z <25), 1, 2))
point_colors = gray_colors[color_indices]

plt.scatter(x, y, c=point_colors, s=100)
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()

额外说明

如果想要更平滑的灰度过渡(而非区间离散配色),可以直接使用matplotlib的灰度色映射:

plt.scatter(x, y, c=z, cmap='gray', s=100)
plt.colorbar(label='Z值')  # 添加颜色条说明
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:53:20