python三维图如何标注曲面_python-2.7 – 在python中使用matplotlib的3D曲面图

本文档描述了作者在Python 2.7环境中使用matplotlib库尝试从CSV数据点绘制3D椭球表面所遇到的问题。作者首先验证了数据点属于椭球,然后尝试了多种方法,包括使用scatter、plot_surface、delaunay2d、griddata等,但结果并未正确显示椭球表面。代码示例展示了不同方法的实现,寻求解决方案。
摘要由CSDN通过智能技术生成

我有三个独立的1-D阵列,包含椭圆体表面的数据点.数据点是通过C代码生成的,并且这些点存储在.CSV文件中.

我想使用matplotlib中的plot_surface函数从这些数据点绘制3D表面.我开始绘制一个三维散点图作为一个健全性检查,以确保我所属的数据点属于一个椭球而不是一些随机的形状.

然后我在matplotlib中尝试了plot_surface()函数,并尝试了迄今为止在SO上讨论过的各种方法,你可以在最后给出的代码中看到它们.我将列出两个输出,因为我的低代表不允许我发布我的所有结果.

>帖子标题为“matplotlib中的表面图”,

这导致了输出:

这个方法在我的代码注释方法-4下实现.我也实现了类似的东西,但没有unique()函数,它再次给了我类似的输出.最后一部分是在我的代码中的方法-3下实现的.

>帖子标题为“在表面上绘制3元组数据点”,

这导致了输出:

该部分在代码中的方法-2下实现.

正如您所看到的,这些方法都没有真正起作用,虽然散点图确认数据点确实属于椭圆体,但表面图给出了错误的结果.

我使用的是python2.7,操作系统:ubuntu-14.04.我是python的新手,所以如果你能提供解释和解决方案,那将会很棒.非常感谢你.

'''

Copyright (c) 2016 Abhishek Agrawal (abhishek.agrawal@protonmail.com)

Distributed under the MIT License.

See accompanying file LICENSE.md or copy at http://opensource.org/licenses/MIT

'''

# Set up modules and packages

# I/O

import csv

from pprint import pprint

# Numerical

import numpy as np

import pandas as pd

from scipy.interpolate import griddata

import math

# 3D visualization special package

import mayavi

from mayavi import mlab

# System

import sys

import time

from tqdm import tqdm

print ""

print "---------------------------------------------------------------------------------"

print " NAOS "

print " "

print " Copyright (c) 2016, A. Agrawal (abhishek.agrawal@protonmail.com) "

print "---------------------------------------------------------------------------------"

print ""

# Start timer.

start_time = time.time( )

# Get plotting packages

import matplotlib

import matplotlib.colors

import matplotlib.axes

import matplotlib.lines as mlines

import matplotlib.patches as mpatches

import matplotlib.pyplot as plt

import matplotlib.mlab as mlab

from matplotlib import rcParams

from matplotlib import cm

from mpl_toolkits.mplot3d import Axes3D

from mpl_toolkits.mplot3d import axes3d

from matplotlib.ticker import LinearLocator, FormatStrFormatter

import matplotlib.tri as tri

# Operations

# Read data in csv file. data returned as a panda series.

data = pd.read_csv( '../data/ellipsoidSurfacePoints.csv' )

# Plot 3D surface of the ellipsoid

fig = plt.figure()

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

ax.set_xlabel('x [km]')

ax.set_ylabel('y [km]')

ax.set_zlabel('z [km]')

ax.ticklabel_format(style='sci', axis='both', scilimits=(0,0))

x = data['X'].values

# print x[1:100]

y = data['Y'].values

# print y

z = data['Z'].values

# print z

r = np.sqrt( x**2 + y**2 + z**2 )

# **************** trisurf, scatter and wireframe ************ #

# triang = tri.Triangulation( x, y )

# ax.plot_trisurf( x, y, z, triangles=triang.triangles, cmap=cm.jet, linewidth=0.1 )

# ax.scatter( x, y, z )

# ax.plot_wireframe( x, y, z )

# plt.show()

# **************** Method - 1 ******************************** #

# pts = mayavi.mlab.points3d( x, y, z, z )

# mesh = mayavi.mlab.pipeline.delaunay2d( pts )

# pts.remove( )

# surf = mayavi.mlab.pipeline.surface( mesh )

# mayavi.mlab.show( )

# **************** Method - 2 ******************************** #

# x1 = np.linspace( x.min(), x.max() )

# y1 = np.linspace( y.min(), y.max() )

# xx, yy = np.meshgrid( x1, y1 )

# zz = griddata( ( x, y ), z, ( x1, y1 ), method='cubic' )

# ax.plot_surface( xx, yy, zz, rstride=5, cstride=5, cmap=cm.jet, linewidth=0.1, antialiased=False )

# plt.show()

# **************** Method - 3 ******************************** #

x1 = np.linspace( x.min(), x.max() )

y1 = np.linspace( y.min(), y.max() )

xx, yy = np.meshgrid( x1, y1 )

zz = griddata( ( x, y ), z, ( xx, yy ), method='cubic' )

ax.plot_surface( xx, yy, zz, rstride=5, cstride=5, cmap=cm.jet, linewidth=0.1, antialiased=False )

plt.show()

# **************** Method - 4 ******************************** #

# x1 = np.linspace( x.min(), x.max(), len( data['X'].unique() ) )

# y1 = np.linspace( y.min(), y.max(), len( data['Y'].unique() ) )

# xx, yy = np.meshgrid( x1, y1 )

# zz = griddata( ( x, y ), z, ( xx, yy ), method='cubic' )

# ax.plot_surface( xx, yy, zz, rstride=5, cstride=5, cmap=cm.jet, linewidth=0.1, antialiased=False )

# plt.show()

# **************** Method - 5 ******************************** #

# xx, yy = np.mgrid[ min(x):max(x):100j, min(y):max(y):100j ]

# zz = griddata( ( x, y ), z, ( xx, yy ), method='cubic' )

# ax.plot_surface( xx, yy, zz, rstride=5, cstride=5, cmap=cm.jet, linewidth=0.1, antialiased=False )

# plt.show()

# Stop timer

end_time = time.time( )

# Print elapsed time

print "Script time: " + str("{:,g}".format(end_time - start_time)) + "s"

print ""

print "------------------------------------------------------------------"

print " Exited successfully! "

print "------------------------------------------------------------------"

print ""

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值