Acho que você está fazendo várias perguntas aqui, vou tentar responder a mais fundamental: carregar seus dados CSV em Python e, em seguida, traçar um gráfico de superfície básico.
Note que no caso geral você precisa de uma matriz NxN de valores Z para um gráfico onde X e Y são vetores de comprimento N. Isto faz sentido porque cada ponto (x, y) precisa de um Valor Z e existem pontos N x N (x, y). Eu vou te mostrar duas maneiras. Uma vez que você as tenha, pelo menos, você está em uma boa posição para começar a personalizar sua trama usando documentação e outros exemplos encontrados na web.
Esta resposta assume que você está usando o Python 3 e uma versão recente do Matplotlib e Numpy . (Numpy é um pacote numérico do Python que é comumente incluído em distribuições Python, por exemplo, Anaconda.) No entanto, a sintaxe não deve ser muito diferente em versões mais antigas.
Primeiro, faça as importações necessárias:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
Para o caso em que você tem 3 colunas de dados 1d --- x, yez:
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()
Notequeemnp.loadtxtvocêpodedefinirqualquerdelimitador,porexemplo''porumespaço.
Paraocasoemquevocêtem2colunasdedados1d---xey---eumamatriz2ddedadosz:
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()
Paraumapersonalizaçãomaisavançada,aquiestáumlinkparaoutrobomtutorialsobreoassunto:
Edit: Para o caso em que você tem todos os pontos de dados necessários cobertos em 3 colunas (X, Y, Z), então plot_trisurf
é o que você precisa. Veja minha resposta no Stack Overflow para um exemplo simples: link