在 plotly Dash 中格式化特定的刻度标签
Format specific tick labels in plotly Dash
我正在热图中绘制一些地区指标,我想通过在 y 轴上将它们着色为红色来突出显示所选地区(yaxis 中的每个刻度是一个地区名称)。我知道在 matplotlib 中你可以遍历每个刻度,但在这里我什么也没找到。有什么办法可以做到这一点吗?
我的代码的相关部分是:
colors = ['black']*len(ranking)
idx = (ranking[ranking.district.isin(selected_districts)]).index.values
for i in idx:
colors[i] = 'red'
fig.update_yaxes(color=colors)
由于颜色不接受数组,所以我的方法不起作用。有什么方法可以用较低级别 API 来实现这个目标吗?我知道这不是一个可重现的例子,但我的问题非常通用并且与数据无关,但如果需要我可以添加一个。
编辑:
工作示例:
import plotly.figure_factory as ff
y = ['1a', '2b', '3c']
x = [1, 2]
z = [[3,4],[5,7],[8,9]]
fig = ff.create_annotated_heatmap(x=x, y=y, z=z)
假设我想让 2b
变成红色。我该怎么做?
这可以使用 tickmode = 'array'
和 ticktext
并插入一些 html,请参阅 here 了解更多信息。
import plotly.figure_factory as ff
y = ['1a', '2b', '3c']
x = [1, 2]
z = [[3,4],[5,7],[8,9]]
fig = ff.create_annotated_heatmap(x=x, y=y, z=z)
fig.update_layout(
yaxis = dict(
tickmode = 'array',
tickvals = y,
ticktext = ["<span style='color:blue';>1a</span>",
"<span style='color:red';>2b</span>",
"<span style='color:green';>3c</span>"]
)
)
fig.show()
对于你的情况,我想你会为你的 ticktext
建立一个列表,比如:
flag = [False, True, False]
tt=[]
for i, why in enumerate(y):
if flag[i]==True:
tt.append("<span style='color:red';>" + why + " </span>")
else:
tt.append("<span style='color:black';>" + why + " </span>")
fig.update_layout(
yaxis = dict(
tickmode='array', tickvals=y, ticktext=tt
)
)
fig.show()
...其中 flag
定义您想要红色文本的位置(类似于您的 idx
),尽管有很多方法可以完成这一部分。
首先查看@jayveesea的回答,这将解决您的问题。然后,如果您可能感兴趣,您可以使用 go.Heatmap
和完全相同的 fig.update_layout
y = ['1a', '2b', '3c']
x = [1, 2]
z = [[3,4],[5,7],[8,9]]
fig = go.Figure(go.Heatmap(x=x, y=y, z=z))
ticktext = [i if i!="2b" else f"<span style='color:red';>{i}</span>" for i in y ]
fig.update_layout(
yaxis=dict(
tickmode='array',
tickvals=y,
ticktext=ticktext
)
)
fig.show()
我正在热图中绘制一些地区指标,我想通过在 y 轴上将它们着色为红色来突出显示所选地区(yaxis 中的每个刻度是一个地区名称)。我知道在 matplotlib 中你可以遍历每个刻度,但在这里我什么也没找到。有什么办法可以做到这一点吗?
我的代码的相关部分是:
colors = ['black']*len(ranking)
idx = (ranking[ranking.district.isin(selected_districts)]).index.values
for i in idx:
colors[i] = 'red'
fig.update_yaxes(color=colors)
由于颜色不接受数组,所以我的方法不起作用。有什么方法可以用较低级别 API 来实现这个目标吗?我知道这不是一个可重现的例子,但我的问题非常通用并且与数据无关,但如果需要我可以添加一个。
编辑:
工作示例:
import plotly.figure_factory as ff
y = ['1a', '2b', '3c']
x = [1, 2]
z = [[3,4],[5,7],[8,9]]
fig = ff.create_annotated_heatmap(x=x, y=y, z=z)
假设我想让 2b
变成红色。我该怎么做?
这可以使用 tickmode = 'array'
和 ticktext
并插入一些 html,请参阅 here 了解更多信息。
import plotly.figure_factory as ff
y = ['1a', '2b', '3c']
x = [1, 2]
z = [[3,4],[5,7],[8,9]]
fig = ff.create_annotated_heatmap(x=x, y=y, z=z)
fig.update_layout(
yaxis = dict(
tickmode = 'array',
tickvals = y,
ticktext = ["<span style='color:blue';>1a</span>",
"<span style='color:red';>2b</span>",
"<span style='color:green';>3c</span>"]
)
)
fig.show()
对于你的情况,我想你会为你的 ticktext
建立一个列表,比如:
flag = [False, True, False]
tt=[]
for i, why in enumerate(y):
if flag[i]==True:
tt.append("<span style='color:red';>" + why + " </span>")
else:
tt.append("<span style='color:black';>" + why + " </span>")
fig.update_layout(
yaxis = dict(
tickmode='array', tickvals=y, ticktext=tt
)
)
fig.show()
...其中 flag
定义您想要红色文本的位置(类似于您的 idx
),尽管有很多方法可以完成这一部分。
首先查看@jayveesea的回答,这将解决您的问题。然后,如果您可能感兴趣,您可以使用 go.Heatmap
和完全相同的 fig.update_layout
y = ['1a', '2b', '3c']
x = [1, 2]
z = [[3,4],[5,7],[8,9]]
fig = go.Figure(go.Heatmap(x=x, y=y, z=z))
ticktext = [i if i!="2b" else f"<span style='color:red';>{i}</span>" for i in y ]
fig.update_layout(
yaxis=dict(
tickmode='array',
tickvals=y,
ticktext=ticktext
)
)
fig.show()