кто меняет цвет текста в сюжетном разбросе и разном маркере? - PullRequest
0 голосов
/ 31 января 2020

Я хочу использовать 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 различных типов, b c 2 видов видов.

результат таков, и легенда гласит Aa, чего я не хочу. enter image description here

1 Ответ

1 голос
/ 03 февраля 2020

Вот как вы можете сопоставить цвет текста с цветом маркера, используя 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()

enter image description here

Относительно Легенда, это выглядит лучше 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()

enter image description here

Это работает, но, вероятно, только с использованием вывода функций Plotly Express, которые устанавливают legendgroup автоматически и могут быть немного ломкими с более сложными фигурами:)

...