使用Pandas绘制DataFrame散点图结果异常,求解决方案及示例代码
问题排查与示例代码
散点图异常排查步骤
- 检查数据类型:从文本文件读取的列可能默认是字符串类型,先执行
print(df.dtypes)确认x、y列是否为float64或int64。如果是object类型,转成数值并处理无效值:df['x'] = pd.to_numeric(df['x'], errors='coerce') df['y'] = pd.to_numeric(df['y'], errors='coerce') # 删除转数值后产生的空值行 df = df.dropna(subset=['x', 'y']) - 检查缺失值:执行
print(df[['x','y']].isnull().sum()),如果存在大量空值,大概率是文本文件格式(比如分隔符、换行)有问题,或者转数值时匹配规则不对,需要回头核对原始文本的结构。 - 排查极端值:用
df[['x','y']].describe()查看数据的极值,要是存在超大/超小的异常值,会把坐标轴拉得极开,导致正常散点挤成一团看起来异常。可以过滤掉极端值:# 保留中间98%的数据,过滤掉上下1%的极值 df = df[(df['x'] > df['x'].quantile(0.01)) & (df['x'] < df['x'].quantile(0.99))] df = df[(df['y'] > df['y'].quantile(0.01)) & (df['y'] < df['y'].quantile(0.99))] - 核对绘图代码:确保列名调用正确,比如:
或用Pandas原生绘图:import matplotlib.pyplot as plt plt.scatter(df['x'], df['y']) plt.show()df.plot.scatter(x='x', y='y')
按'pid'设置不同标记的散点图示例
import pandas as pd import matplotlib.pyplot as plt # 假设你的DataFrame为df,包含x、y、pid列 unique_pids = df['pid'].unique() # 定义标记样式库,可根据需求补充 markers = ['o', 's', '^', 'D', 'v', '*', 'p'] plt.figure(figsize=(10,6)) # 循环绘制每个pid对应的数据点 for idx, pid in enumerate(unique_pids): subset = df[df['pid'] == pid] # 标记样式循环使用,避免数量不足 marker = markers[idx % len(markers)] plt.scatter(subset['x'], subset['y'], marker=marker, label=f'pid={pid}', alpha=0.7) plt.xlabel('X轴') plt.ylabel('Y轴') plt.title('按pid区分标记的散点图') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者Ritesh Sharma
相关产品推荐
相关产品推荐

