我正在使用Matplotlib来可视化三维数组.我几乎按照我想要的方式得到了它,除了一个小小的障碍...请参阅下面的插图和描述我可以做什么以及我想要它做什么...
我希望你们能帮助我:)请参阅下面的来源.
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import rcParams
import numpy as np
rcParams['axes.labelsize'] = 14
rcParams['axes.titlesize'] = 16
rcParams['xtick.labelsize'] = 14
rcParams['ytick.labelsize'] = 14
rcParams['legend.fontsize'] = 14
rcParams['font.family'] = 'serif'
rcParams['font.serif'] = ['Computer Modern Roman']
rcParams['text.usetex'] = True
rcParams['grid.alpha'] = 0.0
def make_cube():
""" A Cube consists of a bunch of planes..."""
planes = {
"top" : ( [[0,1],[0,1]], [[0,0],[1,1]], [[1,1],[1,1]] ),
"bottom" : ( [[0,1],[0,1]], [[0,0],[1,1]], [[0,0],[0,0]] ),
"left" : …
Run Code Online (Sandbox Code Playgroud) 我有一个2D numpy数组,我想用3D绘制它.我听说过mplot3d,但我无法正常工作
这是我想要做的一个例子.我有一个尺寸为(256,1024)的数组.它应该绘制一个3D图形,其中x轴从0到256 y轴从0到1024,图形的z轴显示每个条目的数组值.
我该怎么做?
我试图在matplotlib中制作表面图,但我无法使z轴的格式看起来很好.我希望它是科学记数法,沿着轴的前缀和轴上方的指数(就像你通常在matlab中得到的那样).目前我只能得到没有科学记数法的值(前面有一个逗号和五个零),或者我得到前缀而不是指数......
尝试1 :(给出科学记数法,但不是指数)
from matplotlib import ticker
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z, rstride=3, cstride=3)
formatter = ticker.ScalarFormatter()
formatter.set_scientific(True)
formatter.set_powerlimits((-2,2))
ax.w_zaxis.set_major_formatter(formatter)
Run Code Online (Sandbox Code Playgroud)
尝试2 :(给出十进制表格上的值,与默认输出相同)
from matplotlib import ticker
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z, rstride=3, cstride=3)
ax.ticklabel_format(axis="z", style="sci", scilimits=(0,0))
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我正在尝试使用matplotlib在此页面上重新创建图表:http://books.google.co.uk/books? id = sf9Qn9MS0ykC&p = PA18
这是我到目前为止:
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.patches import FancyArrowPatch
from mpl_toolkits.mplot3d import proj3d
class Arrow3D(FancyArrowPatch):
def __init__(self, xs, ys, zs, *args, **kwargs):
FancyArrowPatch.__init__(self, (0,0), (0,0), *args, **kwargs)
self._verts3d = xs, ys, zs
def draw(self, renderer):
xs3d, ys3d, zs3d = self._verts3d
xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M)
self.set_positions((xs[0],ys[0]),(xs[1],ys[1]))
FancyArrowPatch.draw(self, renderer)
def Rx(phi):
return np.array([[1, 0, 0],
[0, np.cos(phi), -np.sin(phi)],
[0, …
Run Code Online (Sandbox Code Playgroud) 我试图描绘随着时间的推移干草叉分叉的发展.x和y之间的关系近似线性,但最终S呈S 形.最终的关系不是一个功能; 某些x值有多个y值.
Matplotlib为表面图做了很好的线框,但这些表面图似乎无法处理非函数.
是否有另一种方式来绘制这种关系的表面?(如果可能的话,我不想要一个坚实的形状.)
目前我的数据是零数组,其中1
s表示表面位置的近似值.我已经包含了一个非常小的样本数据集,以及将绘制其位置的示例代码.我如何"加入点"?
我的实际数据集较大(500x200x200)并且各不相同,因此我需要开发一个灵活的系统.
这是最终的数字可能是这样的:
从阅读mplot3d
文档这里似乎我可能需要将我的数据转换为2D数组.如果是这种情况,请为此提供一种方法,如果可能的话请告诉我这些数组代表什么.
我非常感谢任何有助于推进此事的意见/建议.
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
sample_data = np.array([
[[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[ 0., 0., …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将2D数据绘制到3D轴上.我使用了3D形状,ax.plot_surface
但是我无法使2D数据与轴墙齐平ax.plot
.
这是一个精简的示例代码,显示了我对2D数据的问题:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Generate Example Data
x = [0.04,0,-0.04]
y = [0.04,0,-0.04]
z = [0.04,0,-0.04]
# Start plotting environment
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Plot 3 lines positioned against the axes "walls"
ax.plot(x,y,-0.08,zdir='z',c='r')
ax.plot(x,z, 0.08,zdir='y',c='g')
ax.plot(y,z,-0.08,zdir='x',c='b')
# Label each axis
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
# Set each axis limits
ax.set_xlim([-0.08,0.08])
ax.set_ylim([-0.08,0.08])
ax.set_zlim([-0.08,0.08])
# Equally stretch all axes
ax.set_aspect("equal")
# Set plot size for saving to disk …
Run Code Online (Sandbox Code Playgroud) 我想使用色彩图,线框和轮廓绘制表面matplotlib
.像这样的东西:
请注意,我不是在询问与xy平行的平面中的轮廓,而是在图像中是3D和白色的轮廓.
如果我采用天真的方式并绘制所有这些东西,我看不到轮廓(见下面的代码和图片).
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = np.mgrid[-1:1:30j, -1:1:30j]
Z = np.sin(np.pi*X)*np.sin(np.pi*Y)
ax.plot_surface(X, Y, Z, cmap="autumn_r", lw=0.5, rstride=1, cstride=1)
ax.contour(X, Y, Z, 10, lw=3, cmap="autumn_r", linestyles="solid", offset=-1)
ax.contour(X, Y, Z, 10, lw=3, colors="k", linestyles="solid")
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果为表面刻面添加透明度,那么我可以看到轮廓,但它看起来非常混乱(请参阅下面的代码和图像)
import numpy as np
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, projection="3d")
X, Y = …
Run Code Online (Sandbox Code Playgroud) 我用Python中的一些数据绘制了表面图.
现在我试图改变这种情节的风格.但不幸的是我陷入了线条颜色.它的默认值是黑色,但我想让它变成红色或任何其他颜色.
我的代码是:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
data=np.loadtxt("test.txt")
def formateU(data):
U = np.zeros((20,20))
for value in data:
U[value[0],value[1]] = value[2]
return U
U = formateU(data)
y,x=np.meshgrid(np.linspace(0.,19,20),np.linspace(0.,19,20))
fig = plt.figure()
ax=plt.axes(projection='3d')
ax.plot_surface(x,y,U,rstride=1,cstride=1,alpha=0,linewidth=0.5)
ax.view_init(30, 45)
plt.savefig("test.png")
plt.show()
Run Code Online (Sandbox Code Playgroud)
它似乎很明显,它必须是一个额外的论点:
ax.plot_surface(x,y,U,rstride=1,cstride=1,alpha=0,linewidth=0.5)
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚.
你能帮我吗?
该test.txt的可在http://www.file-upload.net/download-8564062/test.txt.html
我想画一个平行六面体.实际上我从绘制多维数据集的python脚本开始:
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
points = np.array([[-1, -1, -1],
[1, -1, -1 ],
[1, 1, -1],
[-1, 1, -1],
[-1, -1, 1],
[1, -1, 1 ],
[1, 1, 1],
[-1, 1, 1]])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
r = [-1,1]
X, Y = np.meshgrid(r, r)
ax.plot_surface(X,Y,1, alpha=0.5)
ax.plot_surface(X,Y,-1, alpha=0.5)
ax.plot_surface(X,-1,Y, alpha=0.5)
ax.plot_surface(X,1,Y, alpha=0.5)
ax.plot_surface(1,X,Y, alpha=0.5)
ax.plot_surface(-1,X,Y, alpha=0.5)
ax.scatter3D(points[:, 0], points[:, 1], points[:, 2])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
Run Code Online (Sandbox Code Playgroud)
为了获得平行六面体,我将点矩阵乘以下面的矩阵:
P …
Run Code Online (Sandbox Code Playgroud) mplot3d ×10
python ×10
matplotlib ×9
2d ×1
3d ×1
arrays ×1
numpy ×1
plot ×1
python-2.7 ×1
surface ×1