Как стилизовать / отформатировать точечные маркеры в Plotly scatterplot? - PullRequest
2 голосов
/ 24 октября 2019

Я не уверен, как настроить стили маркера диаграммы рассеяния в диаграммах рассеяния Plotly.

В частности, у меня есть столбец predictions, который равен 0 или 1 (1 представляет неожиданное значение), и хотя я использовал параметр symbol в px.scatter_3d, чтобы указать неожиданное значение через изменяющуюся форму точки(ромб для 1 и кружок для 0), разница очень тонкая, и я хочу, чтобы она была более драматичной. Я представлял что-то вроде ниже (не обязательно должно быть именно так), но что-то вдоль линий точек в форме ромба имеет другой цвет контура или дополнительную форму / пузырь вокруг него. Как мне это сделать?

Кроме того, у меня есть столбец set, который может принимать одно из двух значений, установить A или установить B. Я использовал параметр цвета внутри px.scatter_3d и сделал его равнымset таким образом, точки окрашены в соответствии с тем, из какого набора они пришлиПока он делает то, что я просил, я не хочу, чтобы цвета были синими и красными, но любые два цвета я указываю. Как я смогу это сделать (скажем, я хочу, чтобы цвета были синими и оранжевыми)? Огромное спасибо!

enter image description here

Вот код, который я использовал:

fig = px.scatter_3d(X_combined, x='x', y='y', z='z',
                    color='set', symbol='predictions', opacity=0.7)

fig.update_traces(marker=dict(size=12,
                         line=dict(width=5,
                         color='Black')),
              selector=dict(mode='markers'))

1 Ответ

1 голос
/ 24 октября 2019

Вы можете использовать несколько операторов go.Scatter3d() и собирать их в список, чтобы форматировать каждый сегмент или экстремальные значения более или менее точно так, как вам бы хотелось. Это может быть немного сложнее, чем использование px.scatter_3d(), но это даст вам больше контроля. Следующий фрагмент составлен фрагментом ниже:

График:

enter image description here

Код:

import plotly.graph_objects as go
import numpy as np
import pandas as pd

# sample data
t = np.linspace(0, 10, 50)
x, y, z = np.cos(t), np.sin(t), t

# plotly data
data=[go.Scatter3d(x=[x[2]], y=[y[2]], z=[z[2]],mode='markers', marker=dict(size=20), opacity=0.8),
      go.Scatter3d(x=[x[26]], y=[y[26]], z=[z[26]],mode='markers', marker=dict(size=30), opacity=0.3),
      go.Scatter3d(x=x, y=y, z=z,mode='markers')]

fig = go.Figure(data)
fig.show()

Как вы будете определять различные сегменты, будь то максимальные или минимальные значения, будет полностью зависеть от вас. В любом случае, я надеюсь, что этот подход будет полезен!

...