Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何绘制Z轴为csv中数值大小的三维图形?_Python_Numpy_Csv_Matplotlib_3d - Fatal编程技术网

Python 如何绘制Z轴为csv中数值大小的三维图形?

Python 如何绘制Z轴为csv中数值大小的三维图形?,python,numpy,csv,matplotlib,3d,Python,Numpy,Csv,Matplotlib,3d,我认为绘图中的X和Y值应该由csv中的列和线表示,如下所示: 0,original,1.0000,0.9999,0.9998,0.9997,0.9996,0.9995... 0.9900 1,28663, 4144,6096,6859,7366,7876,8125... 2,11268, 1374,2119,2393,2615,2809,2904... 3,14734, 2122,3115,3466,3740,4011,4144... 4,13341, 1452,2322,268

我认为绘图中的X和Y值应该由csv中的列和线表示,如下所示:

0,original,1.0000,0.9999,0.9998,0.9997,0.9996,0.9995... 0.9900
1,28663,   4144,6096,6859,7366,7876,8125...
2,11268,   1374,2119,2393,2615,2809,2904...
3,14734,   2122,3115,3466,3740,4011,4144...
4,13341,   1452,2322,2689,2877,3114,3238...
5,18458,   2677,3643,4047,4333,4652,4806...
6,13732,   1621,2224,2502,2704,2930,3020...
7,17771,   2955,3904,4270,4566,4872,5041...
8,14447,   1822,2437,2715,2933,3179,3292...
.
.
.
5400,18458,2677,3643,4047,4333,4652,4806
我想把我的数据画成图形。如果我在2D图形中这样做,它看起来真的很难看

图像以2D格式显示此数据,每个列系列都是不同的颜色,例如,原始值是蓝色系列。在我看来,如果它是3D的,它会有更好的视觉表现。

我会寻找一些像图像的东西。我知道Z值是表中每个单元格的大小。我相信我必须绘制一系列不同的系列,其中每个系列都来自csv上的每一整列。我说得对吗

话虽如此,我的问题是:考虑到我指出的情况,如何在3D图形中绘制“.csv”数据

编辑:我找到了一个代码,可以满足我的需要。我是从你那儿得到的。我想我应该应用每一列,比如np.meshgridDataAll1D[:,0]将列0添加到绘图中。看起来meshgrid函数可以接受任意数量的1D数组,我只是不知道如何在python中做到这一点

将numpy作为np导入 将matplotlib.pyplot作为plt导入 从mpl_toolkits.mplot3d导入Axes3D DataAll1D=np.loadtxtdatacsv_1d.csv,分隔符=, 创建二维x、y栅格x和y都将是二维的 十、 Y=np.meshgridDataAll1D[:,0],DataAll1D[:,1] 重复Z以使其成为二维栅格 Z=np.tileDataAll1D[:,2],lenDataAll1D[:,2],1 图=plt.figure ax=图添加子图111,投影='3d' ax.plot_surfaceX,Y,Z,cmap='ocean' 节目
这是一个非常简单的例子,但我想你想要实现的是在3D空间中将每条曲线与其他曲线分开。下面的代码生成两个绘图,一个单独绘制曲线,另一个将输入视为曲面。我想,你可以很容易地在这个基础上进一步发展,实现你更具体的目标

from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import
import matplotlib.pyplot as plt
import numpy

data = numpy.array([[28663, 4144, 6096, 6859, 7366, 7876, 8125],
                    [11268, 1374, 2119, 2393, 2615, 2809, 2904],
                    [14734, 2122, 3115, 3466, 3740, 4011, 4144],
                    [13341, 1452, 2322, 2689, 2877, 3114, 3238],
                    [18458, 2677, 3643, 4047, 4333, 4652, 4806],
                    [13732, 1621, 2224, 2502, 2704, 2930, 3020]])
fig, (ax, bx) = plt.subplots(nrows=1, ncols=2, num=0, figsize=(16, 8),
                             subplot_kw={'projection': '3d'})
for i in range(data.shape[1]):
    ax.plot3D(numpy.repeat(i, data.shape[0]), numpy.arange(data.shape[0]),
              data[:, i])
gridY, gridX = numpy.mgrid[1:data.shape[0]:data.shape[0] * 1j,
                           1:data.shape[1]:data.shape[1] * 1j]
pSurf = bx.plot_surface(gridX, gridY, data, cmap='viridis')
fig.colorbar(pSurf)
plt.show()

很难说最好的打印方式是什么,但是使用plt.imshow可以将3D曲面与光栅一样可视化,甚至更好。可以将二维数组传递给此函数。情节的目的是什么?我的意思是,你在数据中寻找什么样的东西?这里的值不是随机的,它们来自我硕士的项目。这些数字是从图形中删除的节点。第1行中的标签是必须移除节点的概率,第1列中的标签显示此类节点的深度。概率越高,移除的节点越多,并根据其深度显示值。所以那里应该会有一个增长,我想看到一个山的形状,就像在3d中绘制这个值时一样。最后一行不是真实的,以防你注意到它的值不大于前面几行,你认为我在撒谎哈哈哈。你能不能把行数作为z轴值?@PGHE在你问了之后,我意识到z轴值应为表中单元格的大小。我也编辑了我的问题。这就成功了!!我只需要添加,以便数据来自csv:data=genfromtxt'myfile.csv',delimiter=','