在 matplotlib 中可以轻松绘制 3D 图形。 接下来讨论一些重要且常用的 3D 图。

1 ​ 画点代码

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np# setting a custom style to use
style.use('ggplot')# create a new figure for plotting
fig = plt.figure()# create a new subplot on our figure
# and set projection as 3d
ax1 = fig.add_subplot(111, projection='3d')
ax1.scatter(x, y, z, c = 'm', marker = 'o')# defining x, y, z co-ordinates
x = np.random.randint(0, 10, size = 20)
y = np.random.randint(0, 10, size = 20)
z = np.random.randint(0, 10, size = 20)# plotting the points on subplot# setting labels for the axes
ax1.set_xlabel('x-axis')
ax1.set_ylabel('y-axis')
ax1.set_zlabel('z-axis')# function to show the plot
plt.show()

2 ​ 输出

上述程序的输出将为您提供一个可以旋转或放大绘图的窗口。 这是屏幕截图:

现在让我们试着理解这段代码的一些要点。

​ ​from mpl_toolkits.mplot3d import axes3d​ ​

1)这是在 3-D 空间上绘图所需的模块。

​ ​ax1 = fig.add_subplot(111, projection='3d')​ ​

2)在图形上创建一个子图并将投影参数设置为 3d。

​ ​ax1.scatter(x, y, z, c = 'm', marker = 'o')​ ​

3)使用​ ​ .scatter() ​ ​函数来绘制 XYZ 平面中的点。

3 ​ 画线代码

# importing required modules
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np# setting a custom style to use
style.use('ggplot')# create a new figure for plotting
fig = plt.figure()# create a new subplot on our figure
ax1 = fig.add_subplot(111, projection='3d')# defining x, y, z co-ordinates
x = np.random.randint(0, 10, size = 5)
y = np.random.randint(0, 10, size = 5)
z = np.random.randint(0, 10, size = (5, 5))# plotting the points on subplot
ax1.plot_wireframe(x,y,z)# setting the labels
ax1.set_xlabel('x-axis')
ax1.set_ylabel('y-axis')
ax1.set_zlabel('z-axis')plt.show()

4 ​ 输出

代码的部分解释

1)该程序与前一个程序的主要区别在于:

​ ​ax1.plot_wireframe(x,y,z)​ ​

2)使用​ ​ .plot_wireframe() ​ ​方法可以在给定的一组 3-D 点上绘制线条。

6 ​ 画条形图代码

# importing required modules
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np# setting a custom style to use
style.use('ggplot')# create a new figure for plotting
fig = plt.figure()# create a new subplot on our figure
ax1 = fig.add_subplot(111, projection='3d')# defining x, y, z co-ordinates for bar position
x = [1,2,3,4,5,6,7,8,9,10]
y = [4,3,1,6,5,3,7,5,3,7]
z = np.zeros(10)# size of bars
dx = np.ones(10)              # length along x-axis
dy = np.ones(10)              # length along y-axs
dz = [1,3,4,2,6,7,5,5,10,9]   # height of bar# setting color scheme
color = []
for h in dz:if h > 5:color.append('r')else:color.append('b')# plotting the bars
ax1.bar3d(x, y, z, dx, dy, dz, color = color)# setting axes labels
ax1.set_xlabel('x-axis')
ax1.set_ylabel('y-axis')
ax1.set_zlabel('z-axis')plt.show()

7 ​ 输出

8 ​ 代码的部分解释

下面解释代码中的关键部分:

x = [1,2,3,4,5,6,7,8,9,10]
y = [4,3,1,6,5,3,7,5,3,7]
z = np.zeros(10)

1)定义柱的基本位置。 设置 z = 0 意味着所有条形都从 XY 平面开始。

dx = np.ones(10)              # length along x-axis
dy = np.ones(10)              # length along y-axs
dz = [1,3,4,2,6,7,5,5,10,9]   # height of bar

2)dx, dy, dz 表示条的大小。 把他看成一个长方体,那么dx、dy、dz分别是它沿x、y、z轴的展开。

for h in dz:if h > 5:color.append('r')else:color.append('b')

3)将每个条的颜色设置为一个列表。 颜色方案对于高度大于 5 的条形为红色,否则为蓝色。

ax1.bar3d(x, y, z, dx, dy, dz, color = color)

4)最终使用​ ​ .bar3d() ​ ​函数绘制了条形图。

9 ​ 画曲线代码

# importing required modules
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import style
import numpy as np# setting a custom style to use
style.use('ggplot')# create a new figure for plotting
fig = plt.figure()# create a new subplot on our figure
ax1 = fig.add_subplot(111, projection='3d')# get points for a mesh grid
u, v = np.mgrid[0:2*np.pi:200j, 0:np.pi:100j]# setting x, y, z co-ordinates
x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)# plotting the curve
ax1.plot_wireframe(x, y, z, rstride = 5, cstride = 5, linewidth = 1)plt.show()

10 ​ 输出   ​

11 ​ 代码的部分解释

以上代码绘制了一个网格状的球体,下面是部分关键代码的解释:

u, v = np.mgrid[0:2*np.pi:200j, 0:np.pi:100j]

1)使用​ ​ np.mgrid ​ ​来获取点,以便创建网格

x=np.cos(u)*np.sin(v)
y=np.sin(u)*np.sin(v)
z=np.cos(v)

2)球体的参数方程。

ax1.plot_wireframe(x, y, z, rstride = 5, cstride = 5, linewidth = 1)

3)再次使用​ ​ .plot_wireframe() ​ ​​方法。 ​ ​rstride​ ​​ 和 ​ ​cstride ​ ​参数可用于设置网格必须有多密集。

dx = np.ones(10)              # length along x-axis
dy = np.ones(10)              # length along y-axs
dz = [1,3,4,2,6,7,5,5,10,9]   # height of bar

Python中的图形绘制——3D绘图相关推荐

  1. python绘制三维曲面图-Python中使用Matplotlib绘制3D图形示例

    原标题:Python中使用Matplotlib绘制3D图形示例 3D图形能给我们对数据带来更加深入地理解.python的matplotlib库就包含了丰富的3D绘图工具.3D图形在数据分析.数据建模. ...

  2. python绘制三维曲面图-python中Matplotlib实现绘制3D图的示例代码

    Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...

  3. python绘制3d图-python中Matplotlib实现绘制3D图的示例代码

    Matplotlib 也可以绘制 3D 图像,与二维图像不同的是,绘制三维图像主要通过 mplot3d 模块实现.但是,使用 Matplotlib 绘制三维图像实际上是在二维画布上展示,所以一般绘制三 ...

  4. python 3d绘图 拖动_在python中以交互方式旋转3D绘图 - matplotlib

    我想知道如何以this视频中描述的方式交互式旋转3D绘图(如果您从上方或下方或从右侧或左侧决定).我可以在spyder或jupyter Notebook中生成3D绘图,但之后它仍然是静态的,我无法与它 ...

  5. 中boxplot函数的参数设置_如何在Python中生成图形和图表

    在本章中,我们将学习如何在Python中生成图形和图表,同时将使用函数和面向对象的方法来可视化数据. Python中常用的一些可视化数据包括以下几种. Matplotlib. Seaborn. ggp ...

  6. Python:Turtle图形绘制

    Python:Turtle图形绘制 Turtle库 demo1.正方形螺旋线的绘制 (1)利用 turtle 库绘制一个正方形螺旋线 (2)绘制斜螺旋线 (3)绘制彩色斜螺旋线 demo2.经典蟒蛇的 ...

  7. Python中matplotlib默认绘制的条形图比较胖?如何设置成体型匀称的条形图,达到最佳的可视化效果。

    Python中matplotlib默认绘制的条形图比较胖?如何设置成体型匀称的条形图,达到最佳的可视化效果. #默认情形下的条形图 n_bars = len(x_labels)xval = np.ar ...

  8. Python中使用Turtle绘制阴阳鱼(小白的学习分享)

    Python中使用Turtle绘制阴阳鱼(小白的学习分享) 五一在家无聊,小白第一次学习绘制阴阳鱼,代码如下,请各位大神指点: #作者:Guangxu #功能:阴阳鱼的绘制 #版本:V1.0 #日期: ...

  9. 【适合Python语言小白的股价图】利用Python中的matplotlib绘制股价图(非k线图)

    [适合Python语言小白的股价图]利用Python中的matplotlib绘制股价图(非k线图) 代码小白,最近做一家公司的股价复盘用到了matplotlib,在此做个小小的记录.代码的逻辑比较笨, ...

  10. python axes3d函数_Python绘制3D图形:Axes3D

    1 3D图形绘制需要(x,y,z)三组值,下面通过numpy和Axes3D函数会议3D图形.其中Axes3D是mpl_toolkits.mplot3d中的一个绘图函数,mpl_toolkits.mpl ...

最新文章

  1. Centos7 下安装python3及卸载
  2. 如何优雅的导出Excel
  3. Ubuntu下apt-get命令详解
  4. Enterprise Architecture 13 将顺序图自动转化为协作图
  5. php格式化金额函数分享
  6. [转]解决Android studio升级到3.5的一些问题
  7. 读《白帽子讲Web安全》之客户端脚本安全(一)
  8. java 高级工程师面试
  9. Oracle data integrator 11g安装配置和一个实例应用指南pdf
  10. php调用mysql中文变量_用php调用MySQL里的数据,为什么汉字都变成了问号?在线等...
  11. oracle进程的作用,浅析Oracle10g新进程 MMON 和 MMNL的作用
  12. pcl点云库python实现_如何有效地将ROS PointCloud2转换为pcl点云并在python中将其可视化...
  13. 详解电脑屏幕垃圾广告怎么去除
  14. Vijos P1816 统计数字【序列处理】
  15. 学生选课系统代码-3mode【DB】视图层代码【MVC--M】代码
  16. SQL数据库的创建及其详细操作(作业)
  17. 阿里巴巴矢量图标使用
  18. GNSS NMEA-0183 协议
  19. 毫末追击智能驾驶1000天,对战蔚小理将现胜负手
  20. BaseFX 实习小记(终)

热门文章

  1. itunes备份文件的位置在哪
  2. 基于位置的 AR 应用程序开发最完整指南
  3. PhpSpreadsheet VS Box\Spout读取excel性能对比
  4. {大学快毕业的程序员,现在开始写博客}
  5. Python期末考试
  6. usim卡如何换nano卡_一分钟看懂紫光国微5G超级SIM卡使用详解
  7. zabbix短信网关使用了中国网建SMS短信通
  8. 使用ZYNQ实现单LUT内容的动态修改(一)PL端OOC设计流程
  9. 【论文笔记】SC16 ScaleMine: Scalable Parallel Frequent Subgraph Mining in a Single Large Graph
  10. linux支持vmfs文件系统吗,调整vmfs文件系统块大小