gpt4 book ai didi

python - 为特定的 x 轴刻度设置不同的字体颜色

转载 作者:行者123 更新时间:2023-12-01 00:38:33 25 4
gpt4 key购买 nike

我正在创建一个频率图,并绘制了 NA 值。我试图在 x 轴刻度中对 N/A 值进行不同的着色。我知道如何在 matplotlib 中执行此操作,但似乎无法弄清楚如何使用plotly 执行此操作。

我尝试使用值列表更新刻度颜色和刻度字体,但它只期望这两个属性都有一个值。请看下面的代码

# 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

最佳答案

正如我在对 OP 的评论中提到的:

I'm fairly confident plotly does not give this ability directly. The only way I can think of to do it would be super convoluted: put two axes on your plot. One can be totally normal except the tick label for the red tick should be set to an empty string. The other axes would just have the one red tick label and all other labels set to empty string. And then position them so that they're on top of each other.

这确实很糟糕,但它确实有效:

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()

Multiple tick colors

一些注意事项:

  1. 我添加了一个空跟踪,否则我无法显示第二个轴。可能有一种方法可以显示第二个轴而不这样做,但我不知道如何做。
  2. 两个轴的范围必须设置相同,否则第二个轴不会随第一个轴缩放,因为它们可以彼此任意缩放/平移。
  3. 您必须手动指定刻度位置和值。从好的方面来说,这对于这个特定的方法来说实际上有点方便。
  4. side='bottom'似乎没有必要,至少对于这个 plotly 来说是这样,但对于其他人来说可能是这样,而且无论如何它都是明确的,所以......我把它放在这里。
<小时/>

一方面,此方法的优点在于它在某种程度上独立于您使用的绘图类型。另一方面,最好不是通过轴标签而是通过信息的样式来传达信息的差异。例如,不同颜色的条或类似的条可能更能表明差异。

关于python - 为特定的 x 轴刻度设置不同的字体颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57549944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com