如何为每个X值仅绘制对应的最大Y值,去除图表中的竖线
核心逻辑:先对原始数据按日期维度聚合,每个日期仅保留累计PnL的最大值,用聚合后的「单日期-最大PnL」一维映射关系绘图即可消除竖线。
不同工具实现方案
方案1:Python(Pandas + 可视化库)
- 若
Date列为字符串格式,先转换为datetime格式避免X轴排序混乱:
import pandas as pd df['Date'] = pd.to_datetime(df['Date'])
- 按日期分组取对应累计PnL的最大值,得到聚合数据集:
agg_df = df.groupby('Date', as_index=False)['Cumulative PnL'].max(skipna=True)
- 用聚合后的数据集绘图即可,示例用matplotlib:
import matplotlib.pyplot as plt plt.plot(agg_df['Date'], agg_df['Cumulative PnL']) plt.xlabel('Date') plt.ylabel('Cumulative PnL') plt.show()
方案2:Excel
- 提取所有不重复日期:选中原始
Date列,点击「数据」选项卡→「删除重复值」,将去重后的日期单独存到空白列(假设为D列) - 用
MAXIFS函数匹配每个日期对应的最大PnL:假设原始日期存储在A列,原始累计PnL存储在B列,D2为第一个去重日期,在E2单元格输入公式后下拉填充:
=MAXIFS(B:B,A:A,D2)
- 选中D列和E列的聚合数据绘图即可。
方案3:R(dplyr + ggplot2)
- 分组聚合+绘图代码示例:
library(dplyr) library(ggplot2) # 分组取最大值 agg_df <- df %>% group_by(Date) %>% summarise(max_cum_pnl = max(`Cumulative PnL`, na.rm = TRUE)) # 绘图 ggplot(agg_df, aes(x = Date, y = max_cum_pnl)) + geom_line() + labs(x = "Date", y = "Cumulative PnL")
内容的提问来源于stack exchange,提问作者Mo0rBy
相关产品推荐
相关产品推荐

