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

如何修复Pandas绘制散点图时Y轴数据异常的问题?

解决Pandas读取CSV绘制散点图出现直线及Y轴混乱的问题

1. 检查并修正数据类型

CSV读取时,Pandas常因数据含特殊字符、格式不规范,将数值列识别为字符串类型,导致绘图时无法解析为连续数值,最终呈现直线。

  • 执行df.dtypes查看列数据类型,确认用于绘图的X/Y列是float64或int64
  • 若为字符串类型,用pd.to_numeric()转换并清理无效值:
    df['x_column'] = pd.to_numeric(df['x_column'], errors='coerce')
    df['y_column'] = pd.to_numeric(df['y_column'], errors='coerce')
    # 删除转换后为空的行
    df = df.dropna(subset=['x_column', 'y_column'])
    

2. 确认绘图时的轴列对应关系

若误将同一列、索引列作为X/Y轴输入,会直接生成直线。确保指定正确的数值列:

# 错误示例:使用索引或同一列
plt.scatter(df.index, df.index)
# 正确示例:指定对应的数值列
plt.scatter(df['x_column'], df['y_column'])

3. 修复Y轴刻度混乱问题

Y轴刻度混乱多因数据中存在极端离群值,拉伸了整体刻度范围。

  • 先查看数据极值:df[['x_column', 'y_column']].describe()
  • 用四分位数法过滤离群值:
    q1 = df['y_column'].quantile(0.25)
    q3 = df['y_column'].quantile(0.75)
    iqr = q3 - q1
    # 保留合理范围内的数据
    df_filtered = df[(df['y_column'] >= q1 - 1.5*iqr) & (df['y_column'] <= q3 + 1.5*iqr)]
    
  • 若数据量级差异极大,可改用对数刻度:
    plt.yscale('log')
    

完整可运行示例

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV文件(按需指定编码)
df = pd.read_csv('your_data.csv', encoding='utf-8')

# 数据类型转换与清理
df['x'] = pd.to_numeric(df['x'], errors='coerce')
df['y'] = pd.to_numeric(df['y'], errors='coerce')
df = df.dropna(subset=['x', 'y'])

# 过滤离群值
q1, q3 = df['y'].quantile([0.25, 0.75])
iqr = q3 - q1
df_clean = df[(df['y'] >= q1 - 1.5*iqr) & (df['y'] <= q3 + 1.5*iqr)]

# 绘制散点图
plt.figure(figsize=(10,6))
plt.scatter(df_clean['x'], df_clean['y'], alpha=0.6)
plt.xlabel('X轴标签')
plt.ylabel('Y轴标签')
plt.title('正常散点图')
plt.grid(True)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:05:19