首页 > 解决方案 > matplot avline 日期错误的位置

问题描述

我需要按日期绘制错误(每周测量一次)并为特定日期添加一些垂直线。我的数据看起来像:

在此处输入图像描述

我试过了:

import matplotlib.pyplot as pylt
pylt.xticks(rotation=90)
pylt.plot_date(det.dia_corte_fin_prediccion, det.avg_error_diario_semana, fmt='o', 
               tz=None, xdate=True, ydate=False)

fechas=list(det['fecha_baja'].unique())
fechas=[x for x in fechas if str(x) != 'nan']
for i in fechas:
    pylt.axvline(i, color='black')# esta fecha deberia ser unica



fechas=list(det['fec_ultima_fecha_creacion_sol_baja_anterior'].unique())
fechas.extend( list(det['fec_primera_fecha_creacion_sol_baja_posterior'].unique()))
fechas=[x for x in fechas if str(x) != 'nan']

for i in fechas:
    pylt.axvline(i, color='blue',zorder=0)

但我得到一个垂直线位置不正确的图表:

在此处输入图像描述

我还将列的类型更改为 datetime ,但仍然遇到同样的问题:

columnas=det.filter(like='fec', axis=1).columns

for i in columnas:
    det[i]=pd.to_datetime(det[i])

问题是如果日期不在轴上,它会在最后绘制它。

所以现在我需要在轴中创建所有日期以避免这个问题。我怎样才能做到这一点?

谢谢。

标签: pythondatematplotlibplot

解决方案


我似乎正确的方法是更改​​要分散的绘图类型:这样它将在正确的位置添加日期,如果需要,在提供的原始日期之间而不是最后。

det.dia_corte_fin_prediccion=pd.to_datetime(det.dia_corte_fin_prediccion)
ax=pylt.scatter(det.dia_corte_fin_prediccion, det.avg_error_diario_semana)
pylt.axvline(pd.to_datetime('2019-08-06'), color='green')
pylt.axvline(pd.to_datetime('2019-08-11'), color='green')

推荐阅读