Я думаю, что вы задаете несколько вопросов здесь, я постараюсь ответить на самый фундаментальный: загрузка данных CSV в Python, а затем построение основного графика поверхности.
отметим, что в общем случае вам нужна матрица NxN значений Z для графика, где X и Y-векторы длины N. это имеет смысл, потому что каждая точка (x, y) нуждается в Z-значении, и есть N x N (x, y) точек. Я покажу вам два способа. Если у вас есть эти то хоть в хорошем позиция для начала настройки вашего участка с помощью документации и других примеров, найденных в интернете.
этот ответ предполагает, что вы используете 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
Edit: для случая, когда у вас есть все необходимые точки данных, покрытые 3 столбцами (X, Y, Z), то plot_trisurf
- это то, что вам нужно. См. мой ответ на переполнение стека для простого примера: https://stackoverflow.com/questions/39240327/3d-surface-plot-using-matplotlib-in-python/52630484#52630484