Как стилизовать / отформатировать точечные маркеры в диаграмме рассеяния?

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

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

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

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

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 ответ

Решение

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

Участок:

Код:

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()

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

Другие вопросы по тегам