Я думаю, что вы задаете здесь несколько вопросов, я постараюсь ответить на самый фундаментальный: загрузка ваших CSV-данных в Python, а затем построение базового графика поверхности.
Обратите внимание, что в общем случае вам нужна матрица NxN значений Z для графика, где X и Y - векторы длины N. Это имеет смысл, потому что каждая точка (x, y) нуждается в значении Z и существует N x N (x). у) баллы. Я покажу вам два пути. Если у вас есть такие данные, то, по крайней мере, вы сможете начать настраивать свой график, используя документацию и другие примеры, найденные в Интернете.
Этот ответ предполагает, что вы используете Python 3 и последние версии Matplotlib и Numpy. (Numpy - это числовой пакет Python, который обычно включается в дистрибутивы Python, например, Anaconda.) Однако синтаксис не должен сильно отличаться в старых версиях.
Сначала сделайте необходимый импорт:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
Для случая, когда у вас есть 3 столбца данных 1d --- x, y и z:
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()
Обратите внимание, что в np.loadtxt вы можете установить любой разделитель, например, '' для пробела.
Для случая, когда у вас есть 2 столбца данных 1d --- x и y --- и 2d матрицы данных z:
DataX_Y_1D = np.loadtxt("datacsv_1d_xy.csv", delimiter=",")
# create 2d x,y grid (both X and Y will be 2d)
X, Y = np.meshgrid(DataX_Y_1D[:,0], DataX_Y_1D[:,1])
# get 2D z data
Z = np.loadtxt("datacsv_2d_Z.csv", delimiter=",")
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, cmap='ocean')
plt.show()
Для более сложной настройки, вот ссылка на другой хороший учебник по этому вопросу:
https://jakevdp.github.io/PythonDataScienceHandbook/04.12-three-dimensional-plotting.html
Изменить: Для случая, когда у вас есть все необходимые точки данных, покрытые в 3 столбца (X, Y, Z), то вам нужен plot_trisurf
. См. Мой ответ о переполнении стека для простого примера: https://stackoverflow.com/questions/39240327/3d-surface-plot-using-matplotlib-in-python/52630484#52630484