绘图-您可以在x轴上仅绘制月份和日期吗? (忽略年份)

时间:2018-09-14 22:24:51

标签: python jupyter-notebook plotly jupyter

我正在尝试绘制时间序列数据,并且希望x轴仅是月和日。.要求将格式设置为“ yyyy-mm-dd”,但我有几年中数据集的每日平均值...所以我只想在x轴上绘制mm-dd。当我发送的日期时间仅为mm-dd时,它假定mm为年份。我可以绕过年份而只采用mm-dd吗?

df_en_ave1.index = df_en_ave1.index.strftime('%m-%d') #convert my index to month and day datetime

trace1=go.Scatter(x=df_en_ave1.index, y=df_en_ave1.evap) #need to bypass year in date here somehow

data = [trace1]

plotly.offline.iplot(data)

2 个答案:

答案 0 :(得分:1)

请尝试以下方法:

dcc.Graph(figure={
'data': [{
    'x': ['2015-01-01', '2015-01-10 15:30:12', '2015-04-01'],
    'y': [2, 1, 5]
}],
'layout': {
    'xaxis': {
        'tickformat': '%d/%m'
    }
}})

其他格式

%a - abbreviated weekday name.*
%A - full weekday name.*
%b - abbreviated month name.*
%B - full month name.*
%c - the locale's date and time, such as %x, %X.*
%d - zero-padded day of the month as a decimal number [01,31].
%e - space-padded day of the month as a decimal number [ 1,31]; equivalent to %_d.
%f - microseconds as a decimal number [000000, 999999].
%H - hour (24-hour clock) as a decimal number [00,23].
%I - hour (12-hour clock) as a decimal number [01,12].
%j - day of the year as a decimal number [001,366].
%m - month as a decimal number [01,12].
%M - minute as a decimal number [00,59].
%L - milliseconds as a decimal number [000, 999].
%p - either AM or PM.*
%Q - milliseconds since UNIX epoch.
%s - seconds since UNIX epoch.
%S - second as a decimal number [00,61].
%u - Monday-based (ISO 8601) weekday as a decimal number [1,7].
%U - Sunday-based week of the year as a decimal number [00,53].
%V - ISO 8601 week of the year as a decimal number [01, 53].
%w - Sunday-based weekday as a decimal number [0,6].
%W - Monday-based week of the year as a decimal number [00,53].
%x - the locale's date, such as %-m/%-d/%Y.*
%X - the locale's time, such as %-I:%M:%S %p.*
%y - year without century as a decimal number [00,99].
%Y - year with century as a decimal number.
%Z - time zone offset, such as -0700, -07:00, -07, or Z.
%{n}f for fractional seconds with n digits. For example, 2016-10-13 09:15:23.456 with tickformat %H~%M~%S.%2f would display 09~15~23.46*
%% - a literal percent sign (%).

感谢 https://community.plot.ly/t/how-to-make-the-messy-date-ticks-organized/7477/3

答案 1 :(得分:0)

答案:

fig.update_layout(xaxis=dict(tickformat="%d-%m"))

示例图:

enter image description here

完整代码:

# imports
import numpy as np
import pandas as pd
import plotly.express as px

# sample time series data

nperiods=200

np.random.seed(123)
df = pd.DataFrame(np.random.randint(-10,12,size=(nperiods, 4)), columns=list('ABCD'))
datelist = pd.date_range(pd.datetime(2020, 1, 1).strftime('%Y-%m-%d'), periods=nperiods).tolist()
df['dates'] = datelist 
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
df.iloc[0]=0
df=df.cumsum().reset_index()

# melt data to provide the data structure mentioned earlier
dfm=pd.melt(df, id_vars=['dates'], value_vars=df.columns[1:])
dfm.set_index('dates')
dfm.head()

# plotly
fig = px.line(dfm, x="dates", y="value", color='variable')
fig.update_layout(xaxis=dict(tickformat="%d-%m"))
fig.show()