matplotlib 3d - 插入数据

时间:2017-07-26 20:58:34

标签: python matplotlib graph 3d

enter image description here我是编程的初学者。我2个月前就开始了所以请耐心等待我:-) 所以我想在python 3.4上使用matplotlib制作一个3d表面图。

我看了很多关于此的教程,但我没有找到与我需要做的完全相同的事情。我希望你能帮助我。 在他们用meshgrid提供的所有视频中,3轴(x,y,z)之间的关系,但我不想要那样。我想做的是这样的: 我有16个传感器,它们被放置在4行,每个传感器有4个,因此在fisrt行中有1,2,3,4和第二个5,6,7,8等等。(传感器的顺序非常重要的。例如传感器编号4 = skala从0到800的200 ...我想到只使用x和y轴在图表中的正确位置...例如传感器4(= 800来自800)被放置在第四列的第一行... so..x = 4和y = 1和z = 200从800开始。所以最后每个传感器只有一个'真实'值..z ..

如何使用matplotlib为所有16个传感器导入这种数据来制作3d图?我真的很感激任何帮助..

1 个答案:

答案 0 :(得分:2)

你需要从某个地方开始。所以,让我们说数据是16个值的列表。然后,您可以创建它的2D数组并将该数组显示为图像。

import numpy as np
import matplotlib.pyplot as plt

# input data is a list of 16 values, 
# the first value is of sensor 1, the last of sensor 16
input_data = [200,266,350,480,
              247,270,320,511,
              299,317,410,500,
              360,360,504,632]
# create numpy array from list and reshape it to a 4x4 matrix
z = np.array(input_data).reshape(4,4)
# at this point you can already show an image of the data
plt.imshow(z)
plt.colorbar()

plt.show()

enter image description here

现在可以选择在3D绘图中将值绘制为高度,而不是2D绘图中的颜色,使用bar3d绘图。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# input data is a list of 16 values, 
# the first value is of sensor 1, the last of sensor 16
input_data = [200,266,350,480,
              247,270,320,511,
              299,317,410,500,
              360,360,504,632]

# create a coordinate grid
x,y = np.meshgrid(range(4), range(4))

ax = plt.gcf().add_subplot(111, projection="3d")
#plot the values as 3D bar graph
# bar3d(x,y,z, dx,dy,dz) 
ax.bar3d(x.flatten(),y.flatten(),np.zeros(len(input_data)), 
         np.ones(len(input_data)),np.ones(len(input_data)),input_data)

plt.show()

enter image description here

您也可以绘制曲面图,但在这种情况下,网格将定义曲面图块的边缘。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# input data is a list of 16 values, 
# the first value is of sensor 1, the last of sensor 16
input_data = [200,266,350,480,
              247,270,320,511,
              299,317,410,500,
              360,360,504,632]

# create a coordinate grid
x,y = np.meshgrid(range(4), range(4))
z = np.array(input_data).reshape(4,4)

ax = plt.gcf().add_subplot(111, projection="3d")
#plot the values as 3D surface plot 
ax.plot_surface(x,y,z)

plt.show()

enter image description here