Plotly xaxis in weekday name

耗尽温柔 提交于 2019-12-02 06:46:39

If you want to see "Tue 14-08" on xaxis, follow those steps(added in code below):

1.Create a column which corresponds to your requirements

df_pre["date2"] = df_pre["date"].apply(lambda x: datetime.datetime.\
                strptime(x,"%d-%m-%Y %I:%M:%S%p").strftime("%a %d-%m"))
print(df_pre["date2"])
0    Tue 14-08
1    Wed 15-08
2    Thu 16-08
3    Fri 17-08
4    Sat 18-08
Name: date2, dtype: object

2.Create a list from column that looks like you want to see it on xaxis (df_pre["date2"])

list = df_pre["date2"].tolist()
print(list)
['Tue 14-08', 'Wed 15-08', 'Thu 16-08', 'Fri 17-08', 'Sat 18-08']

3.Put in xaxis Layout two parameters tickvals and ticktext: in first parameter over how many values you want to iterate. And in second parameter choose you text (such as this list that we get from column df["date2"])

layout=dict(title="Total",width=960,height=768,
            yaxis=dict(title="Avg",ticklen=5,zeroline=False,gridwidth=2),
            xaxis=dict(title="Date",ticklen=5,zeroline=False,gridwidth=2,
                       #Choose what you want to see on xaxis! In this case list
                       tickvals=[i for i in range(len(list))],
                       ticktext=list
                       ))

And output should be something like that:

I am can not find the option in documentation, that your need. But do not forgot, you can prepare data that you after can put in x, using Python and pandas:

#Import all what we need
import pandas as pd
import plotly
import plotly.graph_objs as go
#Create first DataFrame
df_pre = pd.DataFrame({"date":["14-08-2018 11:00:00am",
                               "15-08-2018 12:00:00am",
                               "16-08-2018 01:00:00pm",
                               "17-08-2018 02:00:00pm",
                               "18-08-2018 03:00:00pm"],
                       "number":["3","5","10","18","22"]})
#Create a column which corresponds to your requirements
df_pre["dow"] = pd.to_datetime(df_pre["date"], \
                               format="%d-%m-%Y %I:%M:%S%p").dt.weekday_name
df_pre["firstchunk"] = df_pre["dow"].astype(str).str[0:3]
df_pre["lastchunk"] = df_pre["date"].astype(str).str[0:5]
df_pre["final"] = df_pre["firstchunk"] + " " + df_pre["lastchunk"]
#Check DataFrame
print(df_pre)
#Repeat all the actions above to the second DataFrame
df_post = pd.DataFrame({"date":["14-08-2018 11:00:00am",
                                "15-08-2018 12:00:00am",
                                "16-08-2018 01:00:00pm",
                                "17-08-2018 02:00:00pm",
                                "18-08-2018 03:00:00pm"],
                        "number":["6","8","12","19","23"]})
df_post["dow"] = pd.to_datetime(df_post["date"], \
                                format="%d-%m-%Y %I:%M:%S%p").dt.weekday_name
df_post["firstchunk"] = df_post["dow"].astype(str).str[0:3]
df_post["lastchunk"] = df_post["date"].astype(str).str[0:5]
df_post["final"] = df_post["firstchunk"] + " " + df_post["lastchunk"]
print(df_post)
#Create list that needed to xaxis
list = df_pre["final"].tolist()
print(list)
#Prepare data
trace0=go.Scatter(x=df_pre["date"],y=df_pre["number"],
                  line=dict(color=("rgb(16,25,109)"),width=1),name="Period_1")
trace1=go.Scatter(x=df_post["date"],y=df_post["number"],
                  line=dict(color=("rgb(77,221,26)"),width=2),name="Period_2")
data = [trace0,trace1]
#Prepare layout
layout=dict(title="Total",width=960,height=768,
            yaxis=dict(title="Avg",ticklen=5,zeroline=False,gridwidth=2),
            xaxis=dict(title="Date",ticklen=5,zeroline=False,gridwidth=2,
                       #Choose what you want to see on xaxis! In this case list
                       tickvals=[i for i in range(len(list))],
                       ticktext=list
                       ))
fig = go.Figure(data=data, layout=layout)
#Save plot as "Total.html" in directory where your script is
plotly.offline.plot(fig, filename="Total.html", auto_open = False)

Update: Also you can try using datetime to achieve what you want (that`s more simple):

#Import all what we need
import pandas as pd
import plotly
import plotly.graph_objs as go
import datetime
#Create first DataFrame
df_pre = pd.DataFrame({"date":["14-08-2018 11:00:00am",
                               "15-08-2018 12:00:00am",
                               "16-08-2018 01:00:00pm",
                               "17-08-2018 02:00:00pm",
                               "18-08-2018 03:00:00pm"],
                       "number":["3","5","10","18","22"]})
#Create a column which corresponds to your requirements
df_pre["date2"] = df_pre["date"].apply(lambda x: datetime.datetime.\
            strptime(x,"%d-%m-%Y %I:%M:%S%p").strftime("%a %d-%m"))
#Check DataFrame
print(df_pre)
#Repeat all the actions above to the second DataFrame
df_post = pd.DataFrame({"date":["14-08-2018 11:00:00am",
                                "15-08-2018 12:00:00am",
                                "16-08-2018 01:00:00pm",
                                "17-08-2018 02:00:00pm",
                                "18-08-2018 03:00:00pm"],
                        "number":["6","8","12","19","23"]})
df_post["date2"] = df_post["date"].apply(lambda x: datetime.datetime.\
             strptime(x,'%d-%m-%Y %I:%M:%S%p').strftime("%a %d-%m"))
print(df_post)
#Create list that needed to xaxis
list = df_pre["date2"].tolist()
print(list)
#Prepare data
trace0=go.Scatter(x=df_pre["date"],y=df_pre["number"],
                  line=dict(color=("rgb(16,25,109)"),width=1),name="Period_1")
trace1=go.Scatter(x=df_post["date"],y=df_post["number"],
                  line=dict(color=("rgb(77,221,26)"),width=2),name="Period_2")
data = [trace0,trace1]
#Prepare layout
layout=dict(title="Total",width=960,height=768,
            yaxis=dict(title="Avg",ticklen=5,zeroline=False,gridwidth=2),
            xaxis=dict(title="Date",ticklen=5,zeroline=False,gridwidth=2,
                       #Choose what you want to see on xaxis! In this case list
                       tickvals=[i for i in range(len(list))],
                       ticktext=list
                       ))
fig = go.Figure(data=data, layout=layout)
#Save plot as "Total.html" in directory where your script is
plotly.offline.plot(fig, filename="Total.html")

you can do like this :-

data = [go.Scatter(x=df.Date, y=df.High)]

for more reference, you could refer this link :- https://plot.ly/python/time-series/

Happy Learning!

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!