Как добавить плоскости на трехмерную диаграмму рассеяния - PullRequest
2 голосов
/ 16 июня 2020

С помощью Blender создана эта модель

Blender octant cube

, которую можно увидеть в A-кадре в по этой ссылке

A-frame cctant cube

Эта модель великолепна, и она дает обзор того, что я пытаюсь достичь sh здесь. По сути, вместо имен у меня были бы точки, которые символизируют одну конкретную платформу c.

На мой взгляд, лучший способ добиться этого с текущим уровнем развития техники - это Графики разброса в 3D . У меня есть следующая диаграмма рассеяния

3D scatterplot

import plotly.express as px
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/tiago-peres/immersion/master/Platforms_dataset.csv')
fig = px.scatter_3d(df, x='Functionality ', y='Accessibility', z='Immersion', color='Platforms')
fig.show()

, перейдя по по этой ссылке , вы сможете щелкнуть кнопку и откройте его в Colab

GitHub open in Colab

Это почти похоже на модель. Тем не менее, по-прежнему необходимо добавить три плоскости к участку в c точках. Точнее, в x = ?, y =? и z =? (Я использую вопросительный знак, потому что значение может быть любым установленным).

Другими словами, хочу добавить три плоскости к этой диаграмме рассеяния

  • x = 10
  • y = 30
  • z = 40

В документации то, что мне очень напоминает то, что я хочу, было 3D Surface Plots .

Я провел исследование и нашел два похожих вопроса с R

1 Ответ

2 голосов
/ 22 июня 2020

Я думаю, вы могли бы искать функцию add_trace в plotly, чтобы вы могли просто создать поверхности, а затем добавить их к фигуре:

Также обратите внимание, что определенно есть способы упростить это код, но для общего представления:

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


fig = px.scatter_3d(df, x='Functionality ', y='Accessibility', z='Immersion', color='Platforms')

bright_blue = [[0, '#7DF9FF'], [1, '#7DF9FF']]
bright_pink = [[0, '#FF007F'], [1, '#FF007F']]
light_yellow = [[0, '#FFDB58'], [1, '#FFDB58']]

# need to add starting point of 0 to each dimension so the plane extends all the way out
zero_pt = pd.Series([0])
z = zero_pt.append(df['Immersion'], ignore_index = True).reset_index(drop = True)
y = zero_pt.append(df['Accessibility'], ignore_index = True).reset_index(drop = True)
x = zero_pt.append(df['Functionality '], ignore_index = True).reset_index(drop = True)

length_data = len(z)
z_plane_pos = 40*np.ones((length_data,length_data))

fig.add_trace(go.Surface(x=x, y=y, z=z_plane_pos, colorscale=light_yellow,  showscale=False))
fig.add_trace(go.Surface(x=x.apply(lambda x: 10), y=y, z = np.array([z]*length_data), colorscale= bright_blue, showscale=False))
fig.add_trace(go.Surface(x=x, y= y.apply(lambda x: 30), z =  np.array([z]*length_data).transpose(), colorscale=bright_pink, showscale=False))

введите описание изображения здесь

...