Python Plotly:如何使用Plotly express自定义xaxis刻度标签?
我试图显示一个在x轴上有日期的水平条形图,但似乎无法做到这一点,尽管x值是字符串类型的日期。正如您在下面所看到的,作为标签出现的数字必须是某种类型的总和,但我不确定确切是什么。如何更改下面的示例以获取日期标签 绘图1:Python Plotly:如何使用Plotly express自定义xaxis刻度标签?,python,plotly,Python,Plotly,我试图显示一个在x轴上有日期的水平条形图,但似乎无法做到这一点,尽管x值是字符串类型的日期。正如您在下面所看到的,作为标签出现的数字必须是某种类型的总和,但我不确定确切是什么。如何更改下面的示例以获取日期标签 绘图1: # imports import numpy as np import pandas as pd import plotly.express as px from datetime import datetime # data np.random.seed(1) cols=li
# imports
import numpy as np
import pandas as pd
import plotly.express as px
from datetime import datetime
# data
np.random.seed(1)
cols=list('ABCDE')
df = pd.DataFrame(np.random.randint(0,2,size=(5, len(cols))), columns=cols)
drng=pd.date_range(datetime(2020, 1, 1).strftime('%Y-%m-%d'), periods=df.shape[0]).tolist()
df['date']=[d.strftime('%Y-%m-%d') for d in drng]
dfm=pd.melt(df, id_vars=['date'], value_vars=df.columns[:-1])
# plotly express
fig = px.bar(dfm, x="date", y="variable", color='value', orientation='h',
hover_data=["date"],
height=400,
color_continuous_scale=['blue', 'teal'],
title='Custom date ticklabels for vertical bar plot',
template='plotly_white',
)
fig.update_traces(showlegend=False)
fig.update(layout_coloraxis_showscale=False)
fig.show()
代码:
# imports
import numpy as np
import pandas as pd
import plotly.express as px
from datetime import datetime
# data
np.random.seed(1)
cols=list('ABCDE')
df = pd.DataFrame(np.random.randint(0,2,size=(5, len(cols))), columns=cols)
drng=pd.date_range(datetime(2020, 1, 1).strftime('%Y-%m-%d'), periods=df.shape[0]).tolist()
df['date']=[d.strftime('%Y-%m-%d') for d in drng]
dfm=pd.melt(df, id_vars=['date'], value_vars=df.columns[:-1])
# plotly express
fig = px.bar(dfm, x="date", y="variable", color='value', orientation='h',
hover_data=["date"],
height=400,
color_continuous_scale=['blue', 'teal'],
title='Custom date ticklabels for vertical bar plot',
template='plotly_white',
)
fig.update_traces(showlegend=False)
fig.update(layout_coloraxis_showscale=False)
fig.show()
我所尝试的:
# imports
import numpy as np
import pandas as pd
import plotly.express as px
from datetime import datetime
# data
np.random.seed(1)
cols=list('ABCDE')
df = pd.DataFrame(np.random.randint(0,2,size=(5, len(cols))), columns=cols)
drng=pd.date_range(datetime(2020, 1, 1).strftime('%Y-%m-%d'), periods=df.shape[0]).tolist()
df['date']=[d.strftime('%Y-%m-%d') for d in drng]
dfm=pd.melt(df, id_vars=['date'], value_vars=df.columns[:-1])
# plotly express
fig = px.bar(dfm, x="date", y="variable", color='value', orientation='h',
hover_data=["date"],
height=400,
color_continuous_scale=['blue', 'teal'],
title='Custom date ticklabels for vertical bar plot',
template='plotly_white',
)
fig.update_traces(showlegend=False)
fig.update(layout_coloraxis_showscale=False)
fig.show()
对于xaxis=dict()
中的fig.update_layout
,我尝试了tickmode
、tickvals
和ticktext
的不同组合,结果完全没有用
尝试2:勾选文本
fig.update_layout(yaxis=dict(title=''),
xaxis=dict(title='',
gridcolor='grey',
#tickmode= 'array',
#tickmode= 'linear',
tick0= 2050,
#dtick=2,
tickvals= [2050, 2100, 2150, 2200],
ticktext = df['date'])
)
设置tickvals=df['date']
fig.update_layout(yaxis=dict(title=''),
xaxis=dict(title='',
gridcolor='grey',
#tickmode= 'array',
#tickmode= 'linear',
#tick0= 2220,
#dtick=200,
#tickvals= [2020, 2040],
ticktext = df['date'])
)
绘图2:
同上:
尝试3:勾选文本
&d勾选
令我惊讶的是,将dtick
设置为任意值可以得到下面的图
fig.update_layout(yaxis=dict(title=''),
xaxis=dict(title='',
gridcolor='grey',
#tickmode= 'array',
#tickmode= 'linear',
tick0= 2050,
dtick=2,
#tickvals= [2020, 2040],
ticktext = df['date'])
)
绘图3:
# imports
import numpy as np
import pandas as pd
import plotly.express as px
from datetime import datetime
# data
np.random.seed(1)
cols=list('ABCDE')
df = pd.DataFrame(np.random.randint(0,2,size=(5, len(cols))), columns=cols)
drng=pd.date_range(datetime(2020, 1, 1).strftime('%Y-%m-%d'), periods=df.shape[0]).tolist()
df['date']=[d.strftime('%Y-%m-%d') for d in drng]
dfm=pd.melt(df, id_vars=['date'], value_vars=df.columns[:-1])
# plotly express
fig = px.bar(dfm, x="date", y="variable", color='value', orientation='h',
hover_data=["date"],
height=400,
color_continuous_scale=['blue', 'teal'],
title='Custom date ticklabels for vertical bar plot',
template='plotly_white',
)
fig.update_traces(showlegend=False)
fig.update(layout_coloraxis_showscale=False)
fig.show()
仍然毫无用处,但现在的刻度至少看起来像日期,尽管我们正在查看一个值,该值表示2008
中的时间戳,源数据是2020
尝试4:滴答声
和滴答声文本
fig.update_layout(yaxis=dict(title=''),
xaxis=dict(title='',
gridcolor='grey',
#tickmode= 'array',
#tickmode= 'linear',
tick0= 2050,
#dtick=2,
tickvals= [2050, 2100, 2150, 2200],
ticktext = df['date'])
)
绘图4:
# imports
import numpy as np
import pandas as pd
import plotly.express as px
from datetime import datetime
# data
np.random.seed(1)
cols=list('ABCDE')
df = pd.DataFrame(np.random.randint(0,2,size=(5, len(cols))), columns=cols)
drng=pd.date_range(datetime(2020, 1, 1).strftime('%Y-%m-%d'), periods=df.shape[0]).tolist()
df['date']=[d.strftime('%Y-%m-%d') for d in drng]
dfm=pd.melt(df, id_vars=['date'], value_vars=df.columns[:-1])
# plotly express
fig = px.bar(dfm, x="date", y="variable", color='value', orientation='h',
hover_data=["date"],
height=400,
color_continuous_scale=['blue', 'teal'],
title='Custom date ticklabels for vertical bar plot',
template='plotly_white',
)
fig.update_traces(showlegend=False)
fig.update(layout_coloraxis_showscale=False)
fig.show()
从if的外观来看,这正是我想要的:
但这和其他尝试一样没有用,因为我们必须指定tickvals=[2050210021502200]
。如果我们改变周期,这些值必须重新指定,这不是很灵活。当然,如果我们能够以某种方式检索plotly使用的默认值,我们可以轻松地用数据集中的日期替换它们。但根据邮报的回答,这似乎仍然是不可能的
我在这里完全不知所措,并且被我的尝试的无用性所迷惑,所以任何其他的建议都会很好 您必须将
tickmode
激活为“数组”,然后定义tickvals
和ticktext
,如:
tickmode = 'array',
tickvals = [2050, 2100, 2150, 2200],
ticktext = df['date'])
我不知道你想在这里做什么。。。虽然
orientation
设置为h
且x值为日期,但您将其称为“垂直条形图”。将条形图的长度指定为日期有点令人担忧:没有明显的零!在这种情况下,条形图从1970-01-01
(Unix时代的开始)开始,并根据增量水平添加,因此第一个条形图到2020-01-01
(持续时间为50年),第二个条形图到2070年的时间大致相同,第三个是2120等。这就是为什么你的蜱虫显示为2050、2100等。啊,我明白了,你试图回答。。。是的,要做到这一点,您可能需要设置每个条形图的base
,并且必须将每个条形图的x
值设置为对应于1970-01-01T00:00:00+您希望条形图长度的时间跨度的日期。但你也可以考虑使用另一种方法,使用真正的脂肪段,开始日期和结束日期…