You need to enable JavaScript to run this app. matplotlib绘制6维PSNR数据触发Unrecognized marker style错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib绘制6维PSNR数据触发Unrecognized marker style错误如何解决

错误诱因

你遇到的报错完全是plt.scatter()参数传错导致的:plt.scatter()的位置参数规则为前两个参数分别是x轴、y轴的坐标数据,第三个位置参数对应点的大小s,第四个对应点的颜色c,第五个参数对应点的样式marker。你直接将6个维度的数组依次传入作为位置参数,第五个位置传入的psnr_bitrate[:,4]数组被matplotlib识别为marker参数,而marker仅支持单个字符串(比如'o'/'^')、坐标点序列等合法格式,传入数值数组自然触发格式错误。

scatter绘制6维数据的可行性问题

普通二维画布的散点图原生仅支持两个维度的坐标映射,直接传6个维度作为位置参数不符合scatter的API定义,完全无法正常运行。如果要在散点图上展示多维度信息,可以将额外维度映射到散点的颜色、大小、透明度、样式等视觉属性上,或者先做降维处理。

正确的可视化方案

推荐两种常用方案,你可以根据需求选择:

方案1:降维后展示聚类结果(最常用)

先通过PCA或者t-SNE算法将6维数据降到2维,再用散点图展示,用颜色区分聚类标签,示例代码如下:

import numpy as np
import glob
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA

# 原数据读取和聚类代码
psnr_bitrate=np.vstack([np.loadtxt(path, dtype='float') for path in glob.iglob(r'E:/UGC/*.txt')])
scaler = StandardScaler()
scaled_features = scaler.fit_transform(psnr_bitrate)
kmeans = KMeans(init="random",n_clusters=3,n_init=10,max_iter=300,random_state=42)
kmeans.fit(scaled_features)
y_kmeans = kmeans.predict(scaled_features)

# 降维到2维
pca = PCA(n_components=2)
reduced_features = pca.fit_transform(scaled_features)

# 绘制聚类结果
plt.scatter(reduced_features[:, 0], reduced_features[:, 1], c=y_kmeans, s=50, cmap='viridis')
plt.xlabel('PCA主成分1')
plt.ylabel('PCA主成分2')
plt.title('6维PSNR数据K-Means聚类结果')
plt.show()

方案2:多视觉属性映射保留原始维度

如果需要保留原始维度的物理意义,可以将不同维度映射到散点的不同视觉属性,示例:

# 以x=第0列、y=第1列,大小映射第2列,颜色映射聚类标签为例
plt.scatter(
    x=psnr_bitrate[:, 0],
    y=psnr_bitrate[:, 1],
    s=psnr_bitrate[:, 2] * 10, # 缩放数值到合适的点大小范围
    c=y_kmeans,
    cmap='viridis',
    alpha=0.7 # 透明度映射可选,可对应第3列数据
)
plt.xlabel('维度0')
plt.ylabel('维度1')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 13:24:04