如何在Pandas中绘制含两种不同颜色的单条折线图
问题与解决方案
问题描述
现有如下Pandas与Matplotlib代码:
import pandas as pd import matplotlib.pyplot as plt alist = [110,120,130] blist = [150,170,190] df1 = pd.Series(alist) df2 = pd.Series(blist) frames = [df1, df2] result = pd.concat(frames) df3 = result.reset_index(drop=False) df3.plot(y=0) plt.show()
当前绘制出的折线图为单一颜色,能否将df1对应的线段设为蓝色、df2对应的线段设为绿色,同时仍保持为单条折线?
解决方案
可以实现,直接用Matplotlib的底层绘图功能分两段绘制即可,修改后的代码如下:
import pandas as pd import matplotlib.pyplot as plt alist = [110,120,130] blist = [150,170,190] df1 = pd.Series(alist) df2 = pd.Series(blist) # 合并数据并重置索引,确保x轴连续 result = pd.concat([df1, df2]).reset_index(drop=True) # 获取x、y轴数据 x = result.index y = result.values # 绘制df1对应的线段(蓝色) plt.plot(x[:3], y[:3], color='blue') # 绘制从df1终点到df2所有点的线段(绿色,保证折线连续) plt.plot(x[2:], y[2:], color='green') plt.show()
关键说明
- 第一段绘制df1的三个点,线段设为蓝色;
- 第二段从df1的最后一个点开始绘制到df2的所有点,这样既保证了折线连续,又让df2对应的线段(包括连接df1终点的那条)变成绿色;
- 如果只需要df1内部的线段为蓝色、df2内部的线段为绿色,不需要中间连接线段变色,可将第二段代码改为
plt.plot(x[3:], y[3:], color='green'),但这样折线会在df1和df2之间出现断点。
内容的提问来源于stack exchange,提问作者idontknowhowtoprogram
相关产品推荐
相关产品推荐

