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

Matplotlib绘图求助:多散点图出现多余线条无法消除

嘿,作为刚接触Matplotlib的新手,遇到子图里多余线条的问题太正常啦!我来帮你搞定这个~

首先,我猜你大概率是在绘制子图的时候,要么误用了plt.plot()(它默认会把点连成线),要么没有明确指定用二维特征来做散点图(毕竟iris数据是4维的,直接画肯定出问题)。咱们直接看修正后的完整代码,我会一步步解释:

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn import cluster

iris = datasets.load_iris()
# 先提取iris数据的前两个特征用来可视化(散点图只能展示二维数据)
X = iris.data[:, :2]

# 设置整个画布的尺寸,让6个子图布局更合理
plt.figure(figsize=(12, 8))

for i in range(1,7):
    # 初始化KMeans,加random_state保证每次聚类结果一致,方便调试
    kmeans = cluster.KMeans(n_clusters=i, random_state=42).fit(X)
    centers = kmeans.cluster_centers_
    labels = kmeans.labels_
    
    plot_nr = 230 + i
    # 获取当前子图的坐标轴对象,这样绘图只会作用在这个子图上
    ax = plt.subplot(plot_nr)
    
    # 绘制带聚类标签颜色的散点图,用scatter而不是plot就不会出现连线
    ax.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', alpha=0.6)
    # 用红色X标记画出聚类中心,方便观察
    ax.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=100, label='Centers')
    
    # 给每个子图加标题,显示聚类数
    ax.set_title(f'KMeans with {i} clusters')
    ax.legend()

# 自动调整子图间距,避免标题、坐标轴标签重叠
plt.tight_layout()
plt.show()

关键注意点(解决多余线条的核心):

  • 用scatter而非plot:plt.plot()默认会把所有点按顺序连接起来,这就是你看到多余线条的原因!scatter是专门画散点的,不会产生连线。
  • 明确操作单个子图:通过ax = plt.subplot()拿到子图的坐标轴对象,然后用ax.scatter来绘图,避免不同子图之间的绘图元素互相干扰。
  • 只使用二维特征可视化:iris数据集是4维的,你没法直接在散点图里展示4维数据,必须选择两个特征(比如前两个)来绘制,否则会出现各种奇怪的问题。

另外,加个random_state参数能让你的KMeans聚类结果每次都一样,调试起来更方便;plt.tight_layout()能自动调整子图的间距,让整个布局更美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:41:18