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

如何使用折线图可视化展示同一DataFrame中两列变量的相关性

原代码问题分析
  • 核心逻辑错误:你调用plt.plot(df_corr,'--')是对2×2的相关系数矩阵绘图,该矩阵仅包含1、-0.99、-0.99、1四个值,输出的折线和两个原始变量的实际变化趋势完全无关,这是你无法理解输出的根本原因
  • 语法错误:你已经将x、y赋值为df的列(Series格式),后续df1[[x, y]]写法不符合pandas索引规则,且df1未定义,正常运行会直接报错
正确实现方式

如果要通过折线图直观体现两个变量的相关性,首先需要消除两个变量的量纲差异(分数取值0-100、用时取值为分钟级,直接绘图看不到趋势关联),可以先做min-max归一化后再绘制双折线对比趋势,也可以搭配更通用的散点+拟合线方案组合验证:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 构造示例df,实际使用时替换为你的数据源即可
df = pd.DataFrame({
    'mark': [92,92,32,95],
    'time': [130,120,175,120]
})

# 打印相关系数值确认
corr_val = df['mark'].corr(df['time']).round(2)
print(f"mark和time的相关系数为:{corr_val}")

# 方案1:归一化双折线图,直观对比趋势
# 对两列做min-max归一化,取值范围统一到0-1
df_norm = (df - df.min()) / (df.max() - df.min())
# 按mark排序让趋势展示更连贯
df_norm = df_norm.sort_values('mark').reset_index(drop=True)

plt.figure(figsize=(8,4))
plt.plot(df_norm['mark'], label='分数(归一化)', marker='o')
plt.plot(df_norm['time'], label='用时(归一化)', marker='s', linestyle='--')
plt.title(f'分数与用时趋势对比(相关系数{corr_val})')
plt.legend()
plt.show()

# 方案2:散点+拟合线,行业通用的相关性展示方式
plt.figure(figsize=(8,4))
plt.scatter(df['mark'], df['time'], label='原始数据点')
# 绘制线性拟合线
z = np.polyfit(df['mark'], df['time'], 1)
p = np.poly1d(z)
plt.plot(df['mark'], p(df['mark']), 'r--', label=f'拟合线,斜率{z[0].round(2)}')
plt.xlabel('分数')
plt.ylabel('用时(分钟)')
plt.title(f'分数与用时相关性散点图')
plt.legend()
plt.show()

结果说明

归一化折线图可以看到分数上升的同时,用时明显同步下降,完美匹配-0.986的强负相关特征;散点图的拟合线斜率为负,也可以直接验证负相关关系。

内容的提问来源于stack exchange,提问作者Cressy de borbon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:09:03