如何用Pandas绘制变量间相关性随时间变化的折线图?
变量对相关性随时间变化的折线图绘制方案
1. 数据预处理:清理与整合
首先需要对每个时间点的相关性数据进行清洗,去除自相关(系数为1.00)和重复的变量对(如x&y与y&x视为同一对),并将三个时间点的数据整合成统一格式,方便后续绘图。
预处理代码
import pandas as pd def process_cor_df(df, day): # 过滤掉自相关行 filtered = df[df['cor'] != 1.00].reset_index() # 提取变量对并统一命名:去掉时间后缀,排序后用&连接(消除x&y和y&x的重复) filtered['pair'] = filtered['Index'].apply( lambda x: '&'.join(sorted([var[:-2] for var in x.split(', ')]) )) # 保留每个变量对的唯一记录 unique_pairs = filtered.drop_duplicates(subset='pair') # 添加时间标识列 unique_pairs['day'] = day return unique_pairs[['day', 'pair', 'cor']] # 处理三个时间点的数据 processed_30 = process_cor_df(day30_df, 30) processed_60 = process_cor_df(day60_df, 60) processed_120 = process_cor_df(day120_df, 120) # 合并为总数据集 combined_df = pd.concat([processed_30, processed_60, processed_120], ignore_index=True)
2. 绘制折线图
使用seaborn和matplotlib绘制折线图,每个变量对对应一条折线,直观展示相关性随时间的变化趋势。
绘图代码
import matplotlib.pyplot as plt import seaborn as sns # 设置绘图风格 sns.set_style("whitegrid") # 创建画布 plt.figure(figsize=(10, 6)) # 绘制分组折线图,每个变量对一条线,带标记点 sns.lineplot( data=combined_df, x='day', y='cor', hue='pair', marker='o', linewidth=2, palette='Set2' ) # 设置图表元素 plt.title('变量对相关性随时间变化趋势', fontsize=14) plt.xlabel('时间(天)', fontsize=12) plt.ylabel('相关系数', fontsize=12) plt.xticks([30, 60, 120]) # 固定X轴刻度为目标时间点 plt.legend(title='变量对', bbox_to_anchor=(1.05, 1), loc='upper left') # 调整布局避免图例截断 plt.tight_layout() # 显示图表 plt.show()
效果说明
运行上述代码后,你会得到一幅折线图:
- X轴为30、60、120天三个时间点
- Y轴为对应变量对的相关系数
- 每条折线对应一个变量对(
x&y、x&z、y&z),清晰呈现各变量对相关性随时间的变化规律
内容的提问来源于stack exchange,提问作者Rafael Nakamura
相关产品推荐
相关产品推荐

