使用pyspark绘制散点图时如何将x轴数值型日期转为标准日期格式
你遇到的问题是数值型date列为纳秒级Unix时间戳,matplotlib默认按数值渲染就会出现科学计数法显示,可通过以下两种方案实现标准日期格式展示:
方案1:提前转换date列类型(推荐,适配性最好)
先将date列转换为pandas标准datetime格式,后续绘图会自动适配日期显示:
import pandas as pd import matplotlib.pyplot as plt # 转换数值型date列为datetime格式,默认自动识别纳秒时间戳 data_pd['date'] = pd.to_datetime(data_pd['date']) # 原有绘图逻辑保持不变 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['totValue'],color='green') plt.scatter(c2.date, c2['totValue'],color='blue') plt.scatter(c3.date, c3['totValue'],color='red') plt.scatter(c4.date, c4['totValue'],color='pink') plt.scatter(c5.date, c5['totValue'],color='yellow') plt.xlabel('date') plt.ylabel('totValue') # 可选配置:旋转x轴标签避免重叠,调整布局防止标签被截断 plt.xticks(rotation=45) plt.tight_layout() plt.show()
方案2:不修改原数据,直接配置x轴格式化器
如果不想改动原始数据集,可通过matplotlib的轴格式化器直接转换显示格式:
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates # 原有绘图逻辑保持不变 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['totValue'],color='green') plt.scatter(c2.date, c2['totValue'],color='blue') plt.scatter(c3.date, c3['totValue'],color='red') plt.scatter(c4.date, c4['totValue'],color='pink') plt.scatter(c5.date, c5['totValue'],color='yellow') plt.xlabel('date') plt.ylabel('totValue') # 新增x轴日期格式配置 ax = plt.gca() # 自定义格式化函数,将数值时间戳转为%Y-%m-%d格式字符串 ax.xaxis.set_major_formatter(lambda x, pos: pd.to_datetime(x).strftime('%Y-%m-%d')) # 可选:设置日期间隔,比如每7天显示一个刻度,避免标签过密 ax.xaxis.set_major_locator(mdates.DayLocator(interval=7)) # 可选配置:旋转x轴标签避免重叠,调整布局防止标签被截断 plt.xticks(rotation=45) plt.tight_layout() plt.show()
如果你的date列实际是秒级/毫秒级时间戳,转换时可指定unit参数:pd.to_datetime(data_pd['date'], unit='s') 或 pd.to_datetime(data_pd['date'], unit='ms') 即可。
内容的提问来源于stack exchange,提问作者tharindu
相关产品推荐
相关产品推荐

