的Python / matplotlib:绘制一个三维立方体,球体和一个载体? [英] Python/matplotlib : plotting a 3d cube, a sphere and a vector?

查看:10569
本文介绍了的Python / matplotlib:绘制一个三维立方体,球体和一个载体?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我搜索如何绘制东西指令尽可能的少用matplotlib,但我没有找到的文档中的任何帮助这一点。

I search how to plot something with less instruction as possible with matplotlib but I don't find any help for this in the documentation.

我想绘制以下的事情: - 一个线框立方体集中在0与2边长 - 一个线框球体集中在0与1的半径 - 一个点在坐标[0,0,0] - 在这一点开始,并进入到矢量[1,1,1]

I want to plot the following things : - a wireframe cube centered in 0 with a side length of 2 - a "wireframe" sphere centered in 0 with a radius of 1 - a point at coordinates [0, 0, 0] - a vector that starts at this point and goes to [1, 1, 1]

如何做到这一点?

感谢您非常非常感谢!

推荐答案

这是一个有点复杂,但您可以通过以下code绘制的所有对象:

It is a little complicated, but you can draw all the objects by the following code:

# -*- coding: utf-8 -*-
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
from itertools import product, combinations
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_aspect("equal")

#draw cube
r = [-1, 1]
for s, e in combinations(np.array(list(product(r,r,r))), 2):
    if np.sum(np.abs(s-e)) == r[1]-r[0]:
        ax.plot3D(*zip(s,e), color="b")

#draw sphere
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)
ax.plot_wireframe(x, y, z, color="r")

#draw a point
ax.scatter([0],[0],[0],color="g",s=100)

#draw a vector
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)

a = Arrow3D([0,1],[0,1],[0,1], mutation_scale=20, lw=1, arrowstyle="-|>", color="k")
ax.add_artist(a)
plt.show()

这篇关于的Python / matplotlib:绘制一个三维立方体,球体和一个载体?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆