简体   繁体   English

如何在 Plotly 中增加飞机的尺寸

[英]How to increase planes' size in Plotly

Got the following code得到以下代码

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

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

grey = [[0,'#C0C0C0'],[1,'#C0C0C0']]

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 = 66.5*np.ones((length_data,length_data))

fig.add_trace(go.Surface(x=x, y=y, z=z_plane_pos, colorscale=grey,  showscale=False))
fig.add_trace(go.Surface(x=x.apply(lambda x: 15.69), y=y, z = np.array([z]*length_data), colorscale= grey, showscale=False))
fig.add_trace(go.Surface(x=x, y= y.apply(lambda x: 55), z =  np.array([z]*length_data).transpose(), colorscale=grey, showscale=False))

fig.update_layout(scene = dict(
        xaxis = dict(nticks=4, range=[0,31.38],),
        yaxis = dict(nticks=4, range=[0,110],),
        zaxis = dict(nticks=4, range=[0,133],),),
        legend_orientation="h",margin=dict(l=0, r=0, b=0, t=0))

that can be opened in Google Colab which produces the following output可以在 Google Colab 中打开,生成以下 output

带有平面的散点图

As you can see, the planes are not filling up the entire axis space, they should respect the axis range.如您所见,平面并没有填满整个轴空间,它们应该尊重轴范围。 In other words, the planes换句话说,飞机

  • z=66.5 - should exist between [0, 31.38] in x and [0, 110] in y z=66.5 - 应该存在于 x 中的 [0, 31.38] 和 y 中的 [0, 110] 之间
  • x=15.59 - should exist between [0, 110] in y and [0, 133] in z x=15.59 - 应该存在于 y 中的 [0, 110] 和 z 中的 [0, 133] 之间
  • y=55 - should exist between [0, 31.38] in x and [0, 133] in z y=55 - 应该存在于 x 中的 [0, 31.38] 和 z 中的 [0, 133] 之间

How can that be done?怎么可能呢?


With this new adjustment ,有了这个新的调整

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

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

grey = [[0,'#C0C0C0'],[1,'#C0C0C0']]

zero_pt = pd.Series([0])
z1 = np.arange(0, 134, 1)
print(z1)
y1 = np.arange(0, 111, 1)
print(z1)
x1 = np.arange(0, 32.38, 1)
print(z1)
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)
print(zero_pt)
print(z)

test1 = pd.Series([133])
test = z.append(test1)

length_data1 = len(z1)
z_plane_pos = 66.5*np.ones((length_data1,length_data1))


length_data2 = len(y1)
y_plane_pos = 55*np.ones((length_data2,length_data2))


length_data3 = len(x1)
x_plane_pos = 15.69*np.ones((length_data3,length_data3))

fig.add_trace(go.Surface(x=x1, y=y1, z=z_plane_pos, colorscale=grey,  showscale=False))
fig.add_trace(go.Surface(x=x.apply(lambda x: 15.69), y=y1, z = np.array([test]*length_data1), colorscale= grey, showscale=False))
fig.add_trace(go.Surface(x=x1, y= y.apply(lambda x: 55), z =  np.array([test]*length_data1).transpose(), colorscale=grey, showscale=False))

fig.update_layout(scene = dict(
        xaxis = dict(nticks=4, range=[0,31.38],),
        yaxis = dict(nticks=4, range=[0,110],),
        zaxis = dict(nticks=4, range=[0,133],),),
        legend_orientation="h",margin=dict(l=0, r=0, b=0, t=0))

nearly having the job done but the planes x=15.59 and y=55 aren't going to the maximum 133 in Immersion几乎完成了工作,但平面 x=15.59 和 y=55 不会达到 Immersion 中的最大值 133

就快到了

The issue was that the arrays I was plotting weren't the right shapes.问题是我绘制的 arrays 形状不正确。

By properly splitting the bit where created the input arrays and the plotting, was able to discover this, and consequently made input arrays (for plotting) of the right size and appropriate content.通过正确拆分创建输入 arrays 和绘图的位,能够发现这一点,从而使输入 arrays(用于绘图)具有正确的大小和适当的内容。

固定八分圆

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

df = pd.read_csv('https://raw.githubusercontent.com/tiago-peres/immersion/master/Platforms_dataset.csv')

zero_pt = pd.Series([0])
z1 = np.arange(0, 134, 1)
y1 = np.arange(0, 111, 1)
x1 = np.arange(0, 32.38, 1)
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)

test1 = pd.Series([133])
test = z.append(test1)

length_data1 = len(z1)
z_plane_pos = 66.5*np.ones((length_data1,length_data1))
length_data2 = len(y1)
y_plane_pos = 55*np.ones((length_data2,length_data2))
length_data3 = len(x1)
x_plane_pos = 15.69*np.ones((length_data3,length_data3))

xvals = x.apply(lambda x: 15.69)
xvals2 = x1
yvals = y1
yvals2 = y.apply(lambda x: 55)
zvals = np.zeros((len(yvals), len(xvals)))
zvals[:, -1] = 133 #  np.array([test]*length_data2)
zvals2 = np.zeros((len(yvals2), len(xvals2)))
zvals2[-1, :] = 133

fig = px.scatter_3d(df, x='Functionality ', y='Accessibility', z='Immersion', color='Platforms')
grey = [[0,'#C0C0C0'],[1,'#C0C0C0']]

fig.add_trace(go.Surface(x=x1, y=y1, z=z_plane_pos, colorscale=grey,  showscale=False))
fig.add_trace(go.Surface(x=xvals, y=yvals, z = zvals, colorscale= grey, showscale=False))
fig.add_trace(go.Surface(x=xvals2, y=yvals2, z = zvals2, colorscale=grey, showscale=False))

fig.update_layout(scene = dict(
        xaxis = dict(nticks=4, range=[0,31.38],),
        yaxis = dict(nticks=4, range=[0,110],),
        zaxis = dict(nticks=4, range=[0,133],),),
        legend_orientation="h",margin=dict(l=0, r=0, b=0, t=0))

See it here . 看这里

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM