我正在创建一个频率图,其中还绘制了NA值。我正在尝试为X轴刻度线中的N / A值设置不同的颜色。我知道如何在matplotlib中执行此操作,但似乎无法弄清楚如何使用plotly。
我尝试使用值列表来更新tickcolors和tickfonts,但它只是期望这两个属性具有单个值。请参见下面的代码
# Doesn't work - plotly expects a single value for tickcolor
fig.update_xaxes(
tickangle = -60,
tickcolor = ['black', 'black', 'black', 'black', 'red']
)
# In matplotlib the following code works fine
# It checks the text for xticklabels and changes color if it equals 'N/A'
_ = [xl.set_color('red') for xl in plt.gca().get_xticklabels() if xl.get_text() == 'N/A / Missing']
我希望它看起来像这样-这是我的matplotlib代码expected output的输出
答案 0 :(得分:2)
正如我在对OP的评论中提到的:
我相当有信心不会直接提供此功能。我能想到的唯一方法是超级复杂:在绘图上放置两个轴。除了红色刻度线的刻度线标签应设置为空字符串外,这可能是完全正常的。其他轴将仅具有一个红色的刻度标签,而所有其他标签均设置为空字符串。然后放置它们,使它们彼此重叠。
这确实很烂,但是确实有效:
import plotly.graph_objs as go
data = [go.Scatter(
x=[1, 2, 3, 4],
y=[4, 5, 6, 7],
name="data"
), go.Scatter(xaxis='x2')]
layout = go.Layout(
xaxis=dict(
range=[0, 5],
title="xaxis title",
tickfont=dict(color="#1f77b4"),
tickmode='array',
tickvals=[1, 2, 3],
ticktext=['a', 'b', 'c'],
),
xaxis2=dict(
range=[0, 5],
tickfont=dict(color="#ff7f0e"),
tickmode='array',
tickvals=[4],
ticktext=['d'],
overlaying="x",
side="bottom",
)
)
fig = go.Figure(data=data, layout=layout)
fig.show()
一些注意事项:
side='bottom'
似乎并不是必需的,至少对于此情节而言,但这可能对其他情节来说是明确的,因此...我将其保留在此处。一方面,此方法的好处在于它在某种程度上与您使用的绘图类型无关。另一方面,最好不要通过轴标签而是通过信息的样式来传达信息的差异。例如,不同的彩色条或类似颜色可能更表明差异。