Seaborn绘制分组累计和折线图异常:现有代码无法生成正确曲线
解决方法
你的问题出在使用 estimator="cumsum" 时,Seaborn 会对每个 idx 对应的所有分组的 value 计算累计和,而非在每个分组内部按 idx 递增计算累计和。要得到每个分组严格上升的累计和曲线,需先在 DataFrame 中预计算每个分组的累计值,再进行绘图。
步骤1:预计算分组累计和
按 hue_val 分组,对每个分组内的 value 计算累计和:
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 创建原始DataFrame data = { 'idx': [1,2,3,4,5,6,7,8,9,10]*3, 'hue_val': ["A"]*10 + ["B"]*10 + ["C"]*10, 'value': np.random.rand(30), } df = pd.DataFrame(data) # 预计算每个分组的累计和 df['cumulative_value'] = df.groupby('hue_val')['value'].cumsum()
步骤2:绘制累计和折线图
使用预计算的 cumulative_value 列绘图:
# 绘制折线图 sns.lineplot(x="idx", y="cumulative_value", hue="hue_val", data=df, marker='o') # 添加图表标签 plt.title('各分组随idx递增的value累计和') plt.xlabel('idx') plt.ylabel('累计value') plt.show()
说明
groupby('hue_val')['value'].cumsum()会对每个hue_val分组单独计算value的累计和,确保每个分组的曲线随idx严格上升(因为np.random.rand()生成的均为正数)。- 加入
marker='o'可更清晰地看到每个idx对应的累计值点,为可选参数。
内容的提问来源于stack exchange,提问作者user6346482
相关产品推荐
相关产品推荐

