【问题标题】:How to change color of text in plotly scatter and different marker?如何更改散点图和不同标记中的文本颜色?
【发布时间】:2020-05-16 23:44:40
【问题描述】:

我想使用 plot.ly 绘制 iris 数据集。它在散射数据中有一个颜色参数,就像 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 种不同类型的标记,bc 2 种物种。

结果是这样的,传说有我不想要的 litel Aa

【问题讨论】:

    标签: python colors plotly legend


    【解决方案1】:

    以下是如何使用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()
    

    这可行,但可能只使用 Plotly Express 函数的输出,它自动设置 legendgroup,并且对于更复杂的数字可能有点脆弱 :)

    【讨论】:

      猜你喜欢
      • 2018-07-31
      • 1970-01-01
      • 2014-12-16
      • 2021-07-13
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多