Я думаю, что вы задаете здесь несколько вопросов, я постараюсь ответить на самый фундаментальный: загрузка ваших 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