我正在尝试以日期时间为x轴绘制数据。数据收集了数年。 我可以将Date转换为datetime格式,提取datetime的年份部分,然后将其用作颜色进行绘图。
df['Date']=pd.to_datetime(df['Date'],errors='coerce')
df['year']=df['Date'].dt.year
df['mthday']=df['Date'].dt.strftime('%d-%b')
df=df.sort_values(by='Date')
plot=px.line(df,x='Date',y='value',color='year')
(我在以下链接上尝试过此解决方案:Plotly: How to plot just month and day on x axis? (Ignore year))
这给了我下图。正确地以不同的颜色显示了不同的年份。但是,x轴跨度为2014年至2020年。我希望x轴仅显示1月至12月,并且将不同年份的图表叠加在此上。 (又名:从1月到12月,仅将x轴缩短/折叠到一组)
已编辑以添加df中的示例:
Date/ value/value2/value3/Note/Unnamed/year/mthday
187 2015-11-10 125 73 79.0 NaN NaN 2015 10-Nov
108 2015-01-25 132 88 61.0 NaN NaN 2015 25-Jan
85 2014-12-25 138 86 69.0 NaN NaN 2014 25-Dec
154 2015-07-24 131 80 62.0 NaN NaN 2015 24-Jul
226 2016-09-18 120 73 61.0 NaN NaN 2016 18-Sep
261 2018-06-07 135 72 64.0 NaN NaN 2018 07-Jun
59 2014-11-20 158 79 70.0 NaN NaN 2014 20-Nov
118 2015-02-12 145 77 70.0 NaN NaN 2015 12-Feb
287 2019-09-02 130 79 66.0 NaN NaN 2019 02-Sep
228 2016-09-26 104 76 59.0 NaN NaN 2016 26-Sep
(实际上,对于图形,我想绘制所有年份的value,value2,value3。在此示例中,我只尝试了所有年份的值)
第二次修改以获取可能的答案: 嗨,我想我已经找到了一种方法。我使用mthday列并将其转换回datetime。默认将年份值设置为1900。然后,我将mthday用作x轴,将year用作颜色进行绘制。然后将年份值隐藏在x轴刻度线中。
df['mthday']=pd.to_datetime(df['mthday'],format='%d-%b',errors='coerce')
fig=px.line(df,x='mthday',y='value',color='year')
fig.update_layout(xaxis_tickformat='%d-%b')
让我知道您是否有更好的方法来实现这一目标。
答案 0 :(得分:2)
以下是我发现执行此操作的一种方法: 我使用mthday列,并将其转换回datetime类型。这样会将所有行的所有年份值都设置为默认值1900。然后,我将mthday用作x轴,并通过指定x轴刻度线来隐藏年份。
df['mthday']=df['Date'].dt.strftime('%d-%b')
df['mthday']=pd.to_datetime(df['mthday'],format='%d-%b',errors='coerce')
df=df.sort_values(by='Date')
plot=px.line(df,x='mthday',y='value',color='year')
plot.update_layout(xaxis_tickformat='%d-%b')