温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - who change color of text in plotly scatter and diierent marker?
colors plotly python legend

python - 谁在情节分散和不同的标记中更改文本的颜色?

发布于 2020-03-28 23:40:14

我想使用plot.ly绘制虹膜数据集。它在散布数据工作中具有颜色参数,如seabron中的色相,但它仅更改标记的颜色,而不能更改文本的颜色,我找不到任何原因来更改每组颜色的标记类型。代码是:

import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",  text='sepal_width')
fig.update_traces(textposition='top center', textfont_size=14, textfont_color=c)
fig.show()

我希望文本颜色像每个点的颜色和标记的3种不同类型,即2种类型的bc一样。

结果就是这样,传说中有Aa我不想要的小东西。 在此处输入图片说明

查看更多

查看更多

提问者
Tavakoli
被浏览
137
nicolaskruchten 2020-02-04 21:27

使用以下方法可以将文本的颜色与标记的颜色进行匹配for_each_trace

import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species",  text='sepal_width')
fig.for_each_trace(lambda t: t.update(textfont_color=t.marker.color, textposition='top center'))
fig.show()

在此处输入图片说明

关于图例,上面的代码在IMO上看起来已经更好了,但是没有选择可以将其关闭。您可以尝试一种方法,其中有两条轨迹,一条仅带有标记,一条带有纯文本,而一条带有纯文本,而不会出现在图例中,如下所示:

import plotly.express as px

df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", text='sepal_width')
def add_trace_copy(trace):
    fig.add_traces(trace)
    new_trace = fig.data[-1]
    new_trace.update(textfont_color=trace.marker.color, textposition='top center', 
                     mode="text", showlegend=False)
    trace.update(mode="markers")
fig.for_each_trace(add_trace_copy)
fig.show()

在此处输入图片说明

这是可行的,但可能仅使用legendgroup自动设置的Plotly Express函数的输出,并且对于更复杂的图形可能会有些脆弱:)