空白的3D Plotly散点图

5
import plotly.graph_objects as go
import numpy as np
import numpy

# Download data set from plotly repo
pts = np.loadtxt(np.DataSource().open('https://raw.githubusercontent.com/plotly/datasets/master/mesh_dataset.txt'))
x, y, z = pts.T

US = [(1970, 4688.5), (1971, 4559.4), (1972, 4807.0), (1973, 4994.6), (1974, 4827.4), (1975, 4612.5), (1976, 4907.3),
      (1977, 5071.4), (1978, 5066.2), (1979, 5105.1), (1980, 4877.4), (1981, 4808.0), (1982, 4562.2), (1983, 4541.5),
      (1984, 4751.8), (1985, 4777.2), (1986, 4736.6), (1987, 4893.1), (1988, 5114.1), (1989, 5171.4), (1990, 5063.9),
      (1991, 5022.3), (1992, 5103.5), (1993, 5222.5), (1994, 5305.7), (1995, 5357.6), (1996, 5505.1), (1997, 5679.0),
      (1998, 5693.0), (1999, 5712.3), (2000, 5915.6), (2001, 5858.2), (2002, 5778.7), (2003, 5854.5), (2004, 5937.6),
      (2005, 5946.6), (2006, 5841.2), (2007, 5919.5), (2008, 5730.6), (2009, 5314.8), (2010, 5555.4), (2011, 5425.1),
      (2012, 5244.1), (2013, 5316.5), (2014, 5389.3), (2015, 5225.4), (2016, 5161.1), (2017, 5128.4), (2018, 5275.5)]

US_x = numpy.asarray([US[x][0] for x in range(0, len(US))])
US_y = numpy.asarray([US[x][1] for x in range(0, len(US))])
z = numpy.asarray([x for x in range(1,50)])

US_x = numpy.reshape(US_x, (7, 7))
US_y = numpy.reshape(US_y, (7,7))
z = numpy.reshape(z, (7, 7))

#fig = go.Figure(data=[go.Mesh3d(x=US_x, y=US_y, z=z, color='lightpink', opacity=0.50)])

fig = go.Figure(data=[go.Scatter3d(x=US_x, y=US_y, z=z,mode='markers')])

fig.update_layout(
    scene=dict(
        xaxis=dict(nticks=4, range=[1970, 2018], ),
        yaxis=dict(nticks=4, range=[4500, 5800], ),
        zaxis=dict(nticks=4, range=[1, 49], ), ),
    width=700,
    margin=dict(r=20, l=10, b=10, t=10))


fig.show()

当我尝试绘制我的数据时,plotly只显示一个没有点的3D图形。我不确定问题出在哪里。如果我不进行reshape,即使数组长度为49,所有变量的列数也都不同。当我进行reshape时,会把数组变成7个列表而不是一个大列表。


这个答案有帮助吗? - Maximilian Peters
1个回答

4

Plotly的Scatter3d期望得到一个扁平的、即一维的数组。您可以先使用flatten将数组扁平化,然后再将其传递给Plotly。

US_x = numpy.reshape(US_x, (7, 7)).flatten()
US_y = numpy.reshape(US_y, (7,7)).flatten()
z = numpy.reshape(z, (7, 7)).flatten()

fig = go.Figure(data=[go.Scatter3d(x=US_x, y=US_y, z=z,mode='markers')])

fig.show() 

enter image description here


fig.show() 对我很有帮助。 - testing_22

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接