我有一个3元组的列表,表示3D空间中的一组点.我想绘制一个覆盖所有这些点的表面.mplot3d包中的plot_surface函数需要作为参数X,Y和Z,它们是2d数组.plot_surface是绘制曲面的正确函数吗?如何将数据转换为所需格式?
data = [(x1,y1,z1),(x2,y2,z2),.....,(xn,yn,zn)]
我有一些由外部程序生成的表面数据作为XYZ值.我想使用matplotlib创建以下图形:
我已经看了几个用于在matplotlib中绘制曲面和轮廓的示例 - 但是,Z值似乎是X和Y的函数,即Y~f(X,Y).
我假设我将以某种方式需要转换我的Y变量,但我还没有看到任何示例,它显示了如何执行此操作.
所以,我的问题是:给定一组(X,Y,Z)点,如何从该数据生成表面和等高线图?
顺便说一句,为了澄清,我不想创建散点图.虽然我在标题中提到了matplotlib,但我并不反对使用rpy(2),如果这样我可以创建这些图表.
我有 3 个数组,如下所示,我正在尝试从中绘制 3d 曲面图(线框或任何其他)。我已经从中创建了一个散点图,但不确定如何从 3D 曲面图的角度来处理它。任何帮助将不胜感激。
X = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, …Run Code Online (Sandbox Code Playgroud) 我试图从元组列表中绘制一个三维表面,数据如下:
[(60,5,'121'),(61,5,'103'),(62,5,'14 .8'),(63,5,'48 .5'),(64,5,'57 .5') ,(65,5,'75 .7'),(66,5,'89 .6'),(67,5,'55 .3'),(68,5,'63 .3'),(69,5,'118') ,(70,5,'128'),(71,5,'105'),(72,5,'115'),(73,5,'104'),(74,5,'134') ,(75,5,'123'),(76,5,'66 .3'),(77,5,'132'),(78,5,'145'),(79,5,'115') ,(80,5,'38 .2'),(81,5,'10 .4'),(82,5,'18 .4'),(83,5,'87'),(84,5,'86 .7') ,(85,5,'78 .9'),(86,5,'89 .9'),(87,5,'108'),(88,5,'57 .1'),(89,5,'51 .1') ,(90,5,'69 .1'),(91,5,'59 .8'),(60,6,'48 .9'),(61,6,'33 .3'),(62,6,' - 19.2' ),(63,6,' - 17.5'),(64,6,' - 6.5'),(65,6,'75 .7'),(66,6,'89 .6'),(67,6,' 55.3'),(68,6,'99 .8'),(69,6,'156'),(70,6,'141'),(71,6,'54 .1'),(72,6,' 66.1'),(73,6,'98 .9'),(74,6,'155'),(75,6,'146'),(76,6,'111'),(77,6,' 132'),(78,6,'145'),(79,6,'97 .3'),(80,6,'101'),(81,6,'59 .4'),(82,6,' 70.4'),(83,6,'142'),(84,6,'145'),(85,6,'140'),(86,6,'56 .9'),(87,6,' 77.8'),(88 ,6,'21 .1'),(89,6,'27 .1'),(90,6,'48 .1'),(91,6,'41 .8')]
数据的格式为:(X,Y,Z)
理想情况下,我希望它看起来像这样:

我不确定如何将我的数据提供给matplotlib.
提前致谢
我正在尝试使用 matplotlibSurface plots使用此站点中的代码绘制 3d :
X、Y 和 Z 的获得如下:
from math import pi
from numpy import cos, meshgrid
alpha = 0.7
phi_ext = 2 * pi * 0.5
def flux_qubit_potential(phi_m, phi_p):
return 2 + alpha - 2 * cos(phi_p)*cos(phi_m) - alpha * cos(phi_ext - 2*phi_p)
phi_m = linspace(0, 2*pi, 100)
phi_p = linspace(0, 2*pi, 100)
X,Y = meshgrid(phi_p, phi_m)
Z = flux_qubit_potential(X, Y).T
Run Code Online (Sandbox Code Playgroud)
并且使用以下代码完成 3d 绘图:
from mpl_toolkits.mplot3d.axes3d import Axes3D
fig = plt.figure(figsize=(14,6))
# `ax` is …Run Code Online (Sandbox Code Playgroud) 对于我的生活,我无法弄清楚如何得到相同的结果作为本.
该链接生成彩色三维图而不使用轮廓.如果我使用相同的技术,但使用我自己的x,y,z数据集,我只得到一种颜色.
区别必须是我为绘图生成z数据的方式.
无论如何,使用这个:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.mlab import griddata
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
import sys
def xyz_ret(file):
f = open(file, 'r')
xyz = []
for i in f:
ret = i.replace('\n','')
xyz.append(map(float,(ret.split('\t'))))
xyz = np.array(xyz)
return xyz[:,0],xyz[:,1],xyz[:,2]
x,y,z = xyz_ret('300.txt')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
xi = np.linspace(min(x), max(x))
yi = np.linspace(min(y), max(y))
X, Y = np.meshgrid(xi, yi)
Z = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 matplotlib 制作一个简单的 3D 曲面图,但该图最终没有显示;我只得到空的 3D 轴。
这是我所做的:
from mpl_toolkits.mplot3d import Axes3D
x = np.arange(1, 100, 1)
y = np.arange(1, 100, 1)
z = np.arange(1, 100, 1)
fig = figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, rstride=5, cstride=5)
show()
Run Code Online (Sandbox Code Playgroud)
...我明白了:
有什么建议么?
我不是科学家,所以请假设我不知道有经验的程序员的行话,或者科学绘图技术的复杂性.Python是我所知道的唯一语言(初学者+,可能是中级).
任务:将多元回归的结果(z = f(x,y))绘制为3D图形上的二维平面(例如,我可以使用OSX的图形工具,或者在此处使用R 绘制回归曲面) .
经过一周搜索Stackoverflow并阅读matplotlib,seaborn和mayavi的各种文档后,我终于找到了最简单的方法来绘制3d表面给出的3d点,听起来很有希望.所以这是我的数据和代码:
首先尝试使用matplotlib:
shape: (80, 3)
type: <type 'numpy.ndarray'>
zmul:
[[ 0.00000000e+00 0.00000000e+00 5.52720000e+00]
[ 5.00000000e+02 5.00000000e-01 5.59220000e+00]
[ 1.00000000e+03 1.00000000e+00 5.65720000e+00]
[ 1.50000000e+03 1.50000000e+00 5.72220000e+00]
[ 2.00000000e+03 2.00000000e+00 5.78720000e+00]
[ 2.50000000e+03 2.50000000e+00 5.85220000e+00]
……]
import matplotlib
from matplotlib.ticker import MaxNLocator
from matplotlib import cm
from numpy.random import randn
from scipy import array, newaxis
Xs = zmul[:,0]
Ys = zmul[:,1]
Zs = zmul[:,2] …Run Code Online (Sandbox Code Playgroud)