簡體   English   中英

如何 plot 3D 圖表 Z 軸是 csv 中值的大小?

[英]How to plot a 3D graph with Z axis being the magnitude of values in a csv?

我相信 plot 中的 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

我想 plot 我的數據在一個圖形中。 如果我在 2D 圖形中這樣做,它看起來真的很難看。

1以 2D 格式顯示此數據,每列系列是不同的顏色,例如“原始”值是藍色系列。 在我看來,如果它是 3D,它會有更好的視覺表現。 在此處輸入圖像描述

我會尋找類似 image 2的東西。 我知道 Z 值是表中每個單元格的大小 我相信我將不得不 plot 一堆不同的系列(其中每個系列來自 csv 上的每一整列)。 我對嗎?

在此處輸入圖像描述

話雖如此,我的問題是:考慮到我指出的情況,我如何在 3D 圖形中 plot 我的“.csv”數據?

編輯:我找到了一個可以滿足我要求的代碼。 我從這里得到的。 I guess I would like to apply each column like np.meshgrid(DataAll1D[:,0] adds column 0 to the plot. It seems like the meshgrid function accepts any number of 1D arrays I just don't know how to do that in python。

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

DataAll1D = np.loadtxt("datacsv_1d.csv", delimiter=",")
# create 2d x,y grid (both X and Y will be 2d)
X, Y = np.meshgrid(DataAll1D[:,0], DataAll1D[:,1])

# repeat Z to make it a 2d grid
Z = np.tile(DataAll1D[:,2], (len(DataAll1D[:,2]), 1))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='ocean')
plt.show()

一個非常簡單的例子,但我想你想要實現的是讓你的每條曲線在 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()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM