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

如何将Matplotlib绘制的KMeans聚类图转为Plotly网页可视化图?

解决Plotly实现KMeans聚类可视化的列缺失问题

问题根源

cs.predict(df)返回的是一维聚类标签数组,不是包含_time、_value列的DataFrame,而Plotly的px.line要求所有绘图数据都来自同一个DataFrame,所以找不到指定列才触发ValueError。Matplotlib的plt.plot能正常绘图,是因为它会自动按索引对齐DataFrame和数组数据,规则和Plotly不同。

解决步骤

  1. 将聚类标签合并到原始DataFrame
    在你的df里新增一列存储聚类结果,比如命名为cluster:
    df['cluster'] = cs.predict(df)
    
  2. 用Plotly绘制散点图(匹配原Matplotlib效果)
    你原代码里的plt.plot(df, cs.predict(df), 'o')实际是绘制散点图,不是折线图,所以应该用px.scatter而非px.line,更贴合需求:
    import plotly.express as px
    
    fig = px.scatter(df, x='_time', y='_value', color='cluster', title='KMeans 聚类可视化')
    fig.show()  # 自动在浏览器打开图表
    

完整示例代码

结合常规流程,整合后的代码如下:

import pandas as pd
from sklearn.cluster import KMeans
import plotly.express as px

# 读取CSV数据,确保_time转为日期类型
df = pd.read_csv('你的数据文件.csv', parse_dates=['_time'])

# 训练KMeans模型(假设用_value作为聚类特征)
cs = KMeans(n_clusters=3, random_state=42)
cs.fit(df[['_value']])

# 新增聚类标签列
df['cluster'] = cs.predict(df)

# 生成Plotly散点图
fig = px.scatter(df, x='_time', y='_value', color='cluster',
                 hover_data=['_time', '_value', 'cluster'],
                 title='KMeans聚类结果可视化')
fig.update_traces(marker_size=8)  # 调整点的大小,更清晰
fig.show()

补充说明

如果误选px.line,会把同聚类的点用线连接起来,不符合聚类可视化的常规展示逻辑。如果确实需要折线+散点叠加,可以在散点图基础上额外添加折线层,但聚类场景下散点图是更直观的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:46:14