Pandas 熊猫:使用Bokeh或任何其他绘图库可视化多年来事件日期的变化

Pandas 熊猫:使用Bokeh或任何其他绘图库可视化多年来事件日期的变化,pandas,time-series,bokeh,timeserieschart,Pandas,Time Series,Bokeh,Timeserieschart,我想创建一个图,其中y轴是我有数据的季节年数,x轴是以月和日为单位的。每个季节性年份将有两个日期 |1957|... |1956| d1--------d2 |1955| d1---------d2 |1954| d1---------d2 |June01|...|Jan01...|Feb11|..

我想创建一个图,其中y轴是我有数据的季节年数,x轴是以月和日为单位的。每个季节性年份将有两个日期

|1957|...
|1956|             d1--------d2
|1955|                                d1---------d2 
|1954|                                                    d1---------d2
     |June01|...|Jan01...|Feb11|...|Feb23|...|Feb26|...|Mar20|...|Mar25|..

我几乎得到了我想要的图表,除了x轴覆盖了整个时间跨度,而不是仅仅12个月

from bokeh.plotting import figure
p1 = figure(plot_width=1000, plot_height=300, x_axis_type="datetime")
p1.circle(merged.date1, merged.index, color = 'red', legend = 'Date1')
p1.circle(merged.date2, merged.index, color = 'green', legend = 'Date2')
show(p1)

我一直试图从日期中去掉年份,但仍然将其作为日期进行绘制。下面的第一行有效,但由于闰年的原因,第二行返回实际数据中的错误(日期超出了月份的范围)。 df_snw['Date1']=df_snw['Date1'].map(lambda x:x.strftime('%m-%d'))
df_snw=pd.to_datetime(df_snw['Date1',格式='%m-%d')

我会将您的日期1和日期2转换为xaxis的一年中的日期,并将x标记为月份。这样,所有数据都以1到365 X的比例叠加

df = pd.DataFrame({'date1':['1954-03-20','1955-02-23','1956-01-01','1956-11-21','1958-01-07'],
                   'date2':['1954-03-25','1955-02-26','1956-02-11','1956-11-30','1958-01-17']},
                  index=['1954','1955','1956','1957','1958'])

df['date2'] = pd.to_datetime(df['date2'])

df['date1'] = pd.to_datetime(df['date1'])

df=df.assign(date2_DOY=df.date2.dt.dayofyear)
df=df.assign(date1_DOY=df.date1.dt.dayofyear)

from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.models import FuncTickFormatter, FixedTicker
p1 = figure(plot_width=1000, plot_height=300)

p1.circle(df.date1_DOY,df.index, color='red', legend='Date1')
p1.circle(df.date2_DOY,df.index, color='green', legend='Date2')
p1.xaxis[0].ticker=FixedTicker(ticks=[1,32,60,91,121,152,182,213,244,274,305,335,366])
p1.xaxis.formatter = FuncTickFormatter(code="""
     var labels = {'1':'Jan',32:'Feb',60:'Mar',91:'Apr',121:'May',152:'Jun',182:'Jul',213:'Aug',244:'Sep',274:'Oct',305:'Nov',335:'Dec',366:'Jan'}
     return labels[tick];
""")
show(p1)

请发布生成代表性示例数据集的代码,而不是发布数据的屏幕截图。请参阅以寻求帮助。此外,如果您能解释
df_snw
合并的
(在博克代码中)与您发布的屏幕截图之间的关系,这将非常有用。您的文章标题以“熊猫绘图”开头,您提供的链接使用熊猫进行绘图,但看起来您正在尝试使用博克进行绘图。仅使用熊猫演示解决方案是否足够?如果不是,请考虑更新标题并在文章中添加一个注释(除了<代码> Bokh 标签)。谢谢安得烈花时间指出如何更好地问我的问题。我已经试着按照你的建议来清理它,我会记住它们。谢谢斯科特的回答。是否可以移动x轴,使其从1月1日开始到12月31日结束,而不是从7月1日开始到6月30日结束。我尝试重新排列勾号列表中的数字,但这只是改变了标签。您将使用Range1D方法。看到这一点,Scott,我尝试使用Range1D方法,但我只能使用连续标量。我将此作为一个问题发布,因为这是一个与此不同的问题。