前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶之Matplotlib入门(八)

Python进阶之Matplotlib入门(八)

作者头像
HuangWeiAI
发布2019-11-28 22:30:27
9450
发布2019-11-28 22:30:27
举报
文章被收录于专栏:浊酒清味

引言

Matplotlib是Python的画图领域使用最广泛的绘图库,它能让使用者很轻松地将数据图形化以及利用它可以画出许多高质量的图像,是用Python画图的必备技能。对于这个教程,大家最好亲自码一遍代码,这样可以更有收获。

学完这课你将会:

1、掌握Matplotlib中的3D画图功能;

2、学会使用text函数玩出手稿效果;

3D图

为了画3D图,我们除了导入maplotlib.pyplot模块,我们还需要导入一个叫做mpl_toolkits的模块:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

然后我们需要用figure()函数定义一个窗口,给它装备好一个3D坐标:

代码语言:javascript
复制
fig = plt.figure()
ax = Axes3D(fig)

可以获得如下效果图:

这个是3D坐标轴,可以通过鼠标旋转观察到不同的角度,大家把代码输入进去亲自感受,手感非常好。

现在我们要输入数据了,因为是一个3D的图,所以我们要X,Y,Z三个维度的坐标。我们先通过meshgrid函数建立一个二维平面网格,然后直接用函数映射的方法或者Z轴坐标。

一切就绪后,就可以plot_surface的方式把3D曲面图给画出来:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

ax.plot_surface(X, Y, Z, rstride=6, cstride=6, cmap='hot')

plt.show()

运行结果:

在这个函数中,首先输入的是X,Y,Z三个维度,没毛病。然后是rstride以及cstride,它们分别控制row和column的密度。这里的密度可以理解为用多少条线来画3D的图,比如我们将rstride和cstride设置成6,看一下效果:

瞬间拉跨,不好看。

手稿图

前面在介绍如何给图片添加文字的时候,引入了text函数。现在我们要利用这个函数,玩一个花样出来:

代码如下:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

eqs = []
eqs.append((r"$W^{3\beta}_{\delta_1 \rho_1 \sigma_2} = U^{3\beta}_{\delta_1 \rho_1} + \frac{1}{8 \pi 2} \int^{\alpha_2}_{\alpha_2} d \alpha^\prime_2 \left[\frac{ U^{2\beta}_{\delta_1 \rho_1} - \alpha^\prime_2U^{1\beta}_{\rho_1 \sigma_2} }{U^{0\beta}_{\rho_1 \sigma_2}}\right]$"))
eqs.append((r"$\frac{d\rho}{d t} + \rho \vec{v}\cdot\nabla\vec{v} = -\nabla p + \mu\nabla^2 \vec{v} + \rho \vec{g}$"))
eqs.append((r"$\int_{-\infty}^\infty e^{-x^2}dx=\sqrt{\pi}$"))
eqs.append((r"$E = mc^2 = \sqrt{{m_0}^2c^4 + p^2c^2}$"))
eqs.append((r"$F_G = G\frac{m_1m_2}{r^2}$"))

plt.axes([0.025,0.025,0.95,0.95])

for i in range(24):
    index = np.random.randint(0,len(eqs))
    eq = eqs[index]
    size = np.random.uniform(12,32)
    x,y = np.random.uniform(0,1,2)
    alpha = np.random.uniform(0.25,.75)
    plt.text(x, y, eq, ha='center', va='center', color="#11557c", alpha=alpha,
             transform=plt.gca().transAxes, fontsize=size, clip_on=True)

plt.xticks([]), plt.yticks([])
# savefig('../figures/text_ex.png',dpi=48)
plt.show()

我们一共写了五个公式,但是图上“这么多”公式的效果是怎么来的呢?关键点就在于“随机”,有位置的随机,有大小的随机,还有透明度的随机。综合效果出来就感觉有很多不同的公式一样。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与机器学习之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档