如何消除同一绘图中两个数据系列之间的空白间隔
解决绘图中两个数据系列间的空白问题
嘿,这个问题我之前处理过!你遇到的空白是因为两个数据子集在today分界点处没有衔接上——要么是today不在你的数据点里,要么是两个子集的末端和起点没有重叠,导致绘图时出现断裂。给你几个实用的解决办法:
方法1:让两个数据子集在分界点重叠
如果today是一个存在的日期点,确保第一个子集包含today,第二个子集也从today开始(你的代码逻辑本身没问题,但如果today不在数据中,就需要手动衔接):
import pandas as pd # 先把Date转为datetime类型(如果还没转的话) MyMatrix['Date'] = pd.to_datetime(MyMatrix['Date']) today = pd.to_datetime(today) # 找到小于等于today的最后一个点,和大于等于today的第一个点 last_before = MyMatrix[MyMatrix['Date'] <= today].iloc[-1] first_after = MyMatrix[MyMatrix['Date'] >= today].iloc[0] # 手动把衔接点加入到另一个子集,确保连续 before_subset = MyMatrix[MyMatrix['Date'] <= today].append(first_after) after_subset = MyMatrix[MyMatrix['Date'] >= today].append(last_before) # 再绘图 MyPlot.plot(before_subset['Date'], before_subset['Y'], color="red") MyPlot.plot(after_subset['Date'], after_subset['Y'], color="blue")
方法2:用单系列按条件着色(更简洁)
与其分成两个系列绘制,不如给整个数据集中的每个点分配对应颜色,然后分段绘制保持连续,这样天然不会有空白:
# 先按Date排序数据,确保顺序正确 MyMatrix_sorted = MyMatrix.sort_values('Date').copy() # 找到颜色切换的索引位置 color_change_idx = MyMatrix_sorted[MyMatrix_sorted['Date'] > today].index[0] # 绘制前半段 MyPlot.plot(MyMatrix_sorted.iloc[:color_change_idx]['Date'], MyMatrix_sorted.iloc[:color_change_idx]['Y'], color='red') # 绘制后半段,从切换点的前一个点开始,确保衔接无空白 MyPlot.plot(MyMatrix_sorted.iloc[color_change_idx-1:]['Date'], MyMatrix_sorted.iloc[color_change_idx-1:]['Y'], color='blue')
方法3:强制x轴连续
有时候空白是因为x轴刻度自动断开了,你可以手动设置x轴范围,确保覆盖整个数据的日期区间:
# 先确保Date是datetime类型 MyMatrix['Date'] = pd.to_datetime(MyMatrix['Date']) # 设置x轴范围从最早到最晚的日期 MyPlot.xlim(MyMatrix['Date'].min(), MyMatrix['Date'].max()) # 再绘制你的两个系列 MyPlot.plot(MyMatrix[MyMatrix["Date"]<=today]['Date'], MyMatrix[MyMatrix["Date"]<=today]['Y'], color="red") MyPlot.plot(MyMatrix[MyMatrix["Date"]>=today]['Date'], MyMatrix[MyMatrix["Date"]>=today]['Y'], color="blue")
以上几种方法里,方法2是最推荐的,既简洁又能保证绘图的连续性,完全避免空白问题。
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

