将matplotlib demo更改为使用带有X Y Z d的csv文件

2024-09-27 04:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用matplotlib创建一个分散的三维绘图,投影表面看起来像这个演示,但使用的是我从excel创建的CSV文件,其中xyz数据包含在3列数字中。在

这是演示代码。。。在

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm

fig = plt.figure()

ax = fig.gca(projection='3d')

X, Y, Z = axes3d.get_test_data(0.05)

ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = ax.contourf(X, Y, Z, zdir='z', offset=-100, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='x', offset=-40, cmap=cm.coolwarm)
cset = ax.contourf(X, Y, Z, zdir='y', offset=40, cmap=cm.coolwarm)

ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)

plt.show()

Tags: fromimportmatplotlibfigcmpltaxoffset
1条回答
网友
1楼 · 发布于 2024-09-27 04:27:14

您只需使用csv.reader来加载数据,然后将它们映射到float。 然后你需要把它们做成纽比的形状。在

import csv
from itertools import groupby

data = []
with open('my.csv') as my_csv:
    csv_reader = csv.reader(my_csv)
    for line in csv_reader:
        data.append(map(float, line))
data.sort()
X, Z = [], []
for x, g in groupby(data, key=lambda line: line[0]):
    X.append(x)
    Y = []
    new_Z = []
    for y, gg in groupby(g, key=lambda line: line[1]):
        Y.append(y)
        new_Z.append(list(gg)[-1][2])
    Z.append(new_Z)
X, Y = np.meshgrid(X, Y) # transform into 2D index numpy arrays 
Z = np.array(Z) # transform into 2D values numpy array

编辑:忘记改变值的形状;更新了代码。在

相关问题 更多 >

    热门问题