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

PySpark环境下为散点图数据点标注对应student_name值的实现方法

实现方案

首先明确前提:PySpark是分布式数据处理框架,本身不提供可视化能力,你需要先将绘图所需的全量/采样数据从Spark DataFrame拉取到本地转为pandas对象,再基于matplotlib实现点标注,具体步骤如下:

步骤1:从Spark DataFrame提取目标字段转为pandas对象

假设你原始的PySpark DataFrame名为spark_df,执行如下代码拉取数据:

# 如果数据量较大建议先采样,避免本地内存溢出:spark_df = spark_df.sample(fraction=0.1, seed=42)
data_pd = spark_df.select("date", "count", "student_name", "cluster").toPandas()

步骤2:绘制散点图并添加学生名称标注

在你原有绘图代码的基础上,增加循环为每个坐标点添加student_name文本标注:

import matplotlib.pyplot as plt

# 按集群拆分数据
c1 = data_pd[data_pd.cluster == 0]
c2 = data_pd[data_pd.cluster == 1]
c3 = data_pd[data_pd.cluster == 2]
c4 = data_pd[data_pd.cluster == 3]
c5 = data_pd[data_pd.cluster == 4]

# 绘制散点
plt.scatter(c1.date, c1['count'], color='green', label='cluster 0')
plt.scatter(c2.date, c2['count'], color='blue', label='cluster 1')
plt.scatter(c3.date, c3['count'], color='red', label='cluster 2')
plt.scatter(c4.date, c4['count'], color='pink', label='cluster 3')
plt.scatter(c5.date, c5['count'], color='yellow', label='cluster 4')

# 为每个数据点添加student_name标注
for idx, row in data_pd.iterrows():
    # 参数说明:x坐标、y坐标、标注文本、水平对齐方式、垂直对齐方式、字体大小
    plt.text(row['date'], row['count'], row['student_name'], 
             ha='center', va='bottom', fontsize=8)

plt.xlabel('date')
plt.ylabel('count')
plt.legend()
plt.show()

优化说明

  • 如果存在标签重叠问题,可以调整plt.text的xytext参数设置文本偏移,例如添加xytext=(3, 3)让文本从坐标点右上方偏移3像素展示
  • 如果date字段为时间戳格式显示不友好,可以先转为pandas datetime格式:data_pd['date'] = pd.to_datetime(data_pd['date'], unit='ms')(根据你的时间戳精度调整unit参数)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:45:05