Python 3.x matplotlib-满足一个条件时点之间的虚线

Python 3.x matplotlib-满足一个条件时点之间的虚线,python-3.x,pandas,matplotlib,Python 3.x,Pandas,Matplotlib,我正在使用matplotlib绘制绘图。我想要实现的是在满足一个条件的情况下连接点。例如,如果我有如下数据帧: import os import pandas as pd import numpy as np from matplotlib import pyplot as plt df=pd.DataFrame({'dates': [2001, 2002, 2003, 2004, 2005, 2006], 'census_people': [306,327,352,478,250, 566

我正在使用matplotlib绘制绘图。我想要实现的是在满足一个条件的情况下连接点。例如,如果我有如下数据帧:

import os
import pandas as pd
import numpy as np

from matplotlib import pyplot as plt

df=pd.DataFrame({'dates': [2001, 2002, 2003, 2004, 2005, 2006], 'census_people': [306,327,352,478,250, 566], 'census_houses': [150,200,249,263, 180, 475]}) #I changed the dates from strings to ints
我可以使用以下代码创建这样的图:

plt.plot('dates','census_houses',data=df[df['dates'] < 2004] ,marker='o',color='orange', linewidth=2)
plt.plot('dates','census_houses',data=df[df['dates'] > 2002] ,marker='o',color='orange', linewidth=2, linestyle = '--')
plt.plt('dates','census_houses',data=df[df['dates']<2004],marker='o',color='orange',linewidth=2)
plt.plt('dates','census_House',data=df[df['dates']>2002],marker='o',color='orange',linewidth=2,linestyle='--'))
该图如下所示:

import os
import pandas as pd
import numpy as np

from matplotlib import pyplot as plt

df=pd.DataFrame({'dates': [2001, 2002, 2003, 2004, 2005, 2006], 'census_people': [306,327,352,478,250, 566], 'census_houses': [150,200,249,263, 180, 475]}) #I changed the dates from strings to ints


然而,我真正想要的是,例如,如果
census_houses
大于250,则使用虚线连接点。如何使用matplotlib实现这一点?欢迎提出任何建议和见解!谢谢~

通过应用剪裁路径可以实现此效果。在本例中,我假设整条线完全画在虚线上,因此只需要剪裁整条线

在本例中,y轴的特殊值设置为220,使用不同的颜色和非常粗的线,以便更好地了解发生了什么。
Rectangle((x,y),width,height)
的参数将
y
设置为所需的截止值,
x
是最左侧的某个位置,
width
确保
x+width
是最右侧,
height
是一个大的正数,用于线上方剪裁,用于线下方剪裁

包含有关剪裁路径的详细信息

将熊猫作为pd导入
从matplotlib导入pyplot作为plt
从matplotlib.patches导入矩形
def do_剪裁(修补程序、特殊_y、保持_低于=真、ax=无):
ax=ax或plt.gca()
xmin,xmax=plt.xlim()
ymin,ymax=plt.ylim()
高度=ymax-ymin
如果将_保持在以下位置:
高度=-高度
clip_rect=矩形((xmin,特殊),xmax-xmin,高度,
transform=ax.transData)
对于修补程序中的p:
p、 设置剪辑路径(剪辑路径)
df=pd.DataFrame({'dates':[2001,2002,2003,2004,2005,2006],
“人口普查房屋”:[150200249263180475])
plt.plot('dates','census_house',data=df,color='limegreen',linewidth=10,linestyle='--'))
plot_patches=plt.plot('dates','census_House',data=df,color='crimson',线宽=10)
do_剪裁(打印面片,220)
plt.show()

非常感谢您的回复!这个解决方案很受欢迎!我会尝试将你的代码应用到我自己的问题上。。。