如何从指定日期开始更改Pandas价格折线图的曲线颜色?
实现折线图分段颜色(指定日期后改为红色)
核心思路
要实现指定位置后曲线变色,需要将数据拆分为两段分别绘制:前半段用默认颜色,指定位置(第100天)及之后用红色。同时先修正你代码中索引未生效的问题。
完整代码示例
import pandas as pd import matplotlib.pyplot as plt # 数据处理:修正索引问题 df = pd.DataFrame.from_dict(cryptocurrency.prices) df["time"] = pd.to_datetime(df["time"], unit="s") df = df.set_index("time") # 必须将time设为索引,才能方便分割数据 # 定义分割点:第100天(索引从0开始,第100行及之后变红) split_position = 100 # 如果需要按具体日期分割,替换为下面一行(示例日期) # split_date = pd.to_datetime("2024-05-01") # 创建画布并分段绘制 plt.figure(figsize=(12, 8)) # 绘制前100天的曲线(默认颜色) plt.plot(df["close"].iloc[:split_position], label="Price") # 按日期分割的写法:plt.plot(df["close"][df.index < split_date], label="Price") # 绘制第100天及之后的曲线(红色) plt.plot(df["close"].iloc[split_position:], color="red", label="Price (After Day 100)") # 按日期分割的写法:plt.plot(df["close"][df.index >= split_date], color="red", label="Price (After Specified Date)") # 图表配置 plt.title(cryptocurrency.name) plt.legend() plt.grid() plt.show()
关键细节说明
- 索引修正:你原代码中的
df.set_index("time", inplace=False)没有赋值给变量,导致索引未生效,必须通过df = df.set_index("time")或inplace=True确认索引设置。 - 分割逻辑:
- 按行数分割:用
iloc[:split_position]取前100行,iloc[split_position:]取第100行及之后的数据。 - 按具体日期分割:直接用日期比较筛选数据,更适合非连续时间序列场景。
- 按行数分割:用
- 图例控制:如果不需要区分两段曲线,可将后半段的
label设为和前半段一致,图例只会显示一个条目。
内容的提问来源于stack exchange,提问作者linux888
相关产品推荐
相关产品推荐

