Python-Matplotlib可视化(7),2024年最新网易程序员面试题

在系列博文的中,我们已经学习了如何自定义绘图的颜色和样式,以使得绘制更加精美、符合审美要求。可以用Matplotlib绘制出复杂而又精美的统计图,同时也讲解了注释的用法,使统计图变得清晰简洁。但这些仅仅是Matplotlib绘图包强大功能的冰山一角。

当我们使用一个绘图包时,我们需要其涵盖的内容极其多样:一方面,我们希望可以使用最少的代码和技巧创建任何类型的图形;另一方面,我们也希望能够灵活的自定义图形的所有方面。这是两个截然相反的目标,Matplotlib在这两个目标之间提供了优异的平衡。接下来,我们将看到如何在多个方面自定义图形。

多个子图的合成


有时,我们希望检查数据的多个方面。例如,查看一个地区的天气状况,我们不仅希望得到时间与温度的关系,同时我们也需要关注时间与风力、PM2.5等方面之间的关系,此时我们希望同时展现时间-温度、时间-风力、时间-PM2.5三个不同的图形,Matplotlib提供了将多个图形组合在一起的方法。

import numpy as np

from matplotlib import pyplot as plt

t = np.linspace(-np.pi, np.pi, 1024)

grid_size = (4, 2)

plt.subplot2grid(grid_size, (0, 0), rowspan = 3, colspan = 1)

plt.plot(np.sin(2 * t), np.cos(0.5 * t), c = ‘m’)

plt.subplot2grid(grid_size, (0, 1), rowspan = 3, colspan = 1)

plt.plot(np.cos(3 * t), np.sin(t), c = ‘c’)

plt.subplot2grid(grid_size, (3, 0), rowspan=1, colspan=3)

plt.plot(np.cos(5 * t), np.sin(7 * t), c= ‘y’)

plt.tight_layout()

plt.show()

多个子图的合成

Tips:使用plt.subplot2grid()可以定义一个R行、C列的网格。然后,我们可以将一个图形渲染到所定义的网格中。

plt.subplot2grid()函数有四个常用参数:

  1. 第一个参数是网格的行数和列数,作为元组传递,例如我们想要一个R行、C列的网格,则需要传递(R,C)。

  2. 第二个参数用于确定图形在网格中的坐标,也作为元组传递。

  3. 可选参数rowspan定义图形将占据多少行。

  4. 可选参数colspan定义图形将占据多少列。

调用plt.subplot2grid()后,对plt绘图的下一次调用将在指定的矩形区域内绘制图形,同理,要在网格的另一个区域中绘制下一个图形,需要再次调用plt.subplot2grid()

在示例中,定义了一个2x4的网格。前两个图形占据了1列、3行,第三个图形占据了两列、一行。一旦绘制了所有的图形,就需要调用pyplot.tight_layout()按照定义自动排列所有图形,确保它们彼此不重叠。

为每个子图添加标题

我们已经可以将多个子图合成在一个图形中,但是每个子图可能还需要有自己的标题,可以使用plt.title()为每个子图添加标题:

import numpy as np

from matplotlib import pyplot as plt

def get_radius(t, params):

m, n_1, n_2, n_3 = params

u = (m * t) / 4

return (np.fabs(np.cos(u)) ** n_2 + np.fabs(np.sin(u)) ** n_3) ** (-1. / n_1)

grid_size = (3, 4)

t = np.linspace(0, 2 * np.pi, 1024)

for i in range(grid_size[0]):

for j in range(grid_size[1]):

params = np.random.randint(1, 20+1, size = 4)

r = get_radius(t, params)

plt.subplot2grid(grid_size, (i, j), rowspan=1, colspan=1)

plt.plot(r * np.cos(t), r * np.sin(t), c = ‘c’)

plt.title(‘%d, %d, %d, %d’ % tuple(params), fontsize = ‘small’)

plt.suptitle(“Example of plt.suptitle”)

plt.tight_layout()

plt.show()

为每个子图添加标题

Tips:plt.title()函数可以为每一个图形提供一个标题,但此时,如果我们需要为整个图形提供一个标题,则应该使用plt.suptitle()函数。

子图合成的另一种方法

上述的子图合成方法具有通用性,可以使用它创建复杂的布局,但如果我们只需要在同一行或同一列中绘制多个子图,则可以使用更简洁的代码:

import numpy as np

from matplotlib import pyplot as plt

t = np.linspace(-np.pi, np.pi, 1024)

fig, (ax0, ax1, ax2) = plt.subplots(ncols =3)

ax0.plot(np.sin(2 * t), np.cos(0.5 * t), c = ‘c’)

ax1.plot(np.cos(3 * t), np.sin(t), c = ‘c’)

ax2.plot(np.cos(3 * t), np.sin(2 * t), c = ‘c’)

plt.tight_layout()

plt.show()

子图合成的另一种方法

Tips:plt.subplots()函数接受两个可选参数ncols和nrows,并返回一个带有ncols*nrows轴实例的Figure对象。轴实例按nrows行、ncols列排列在网格中。

更简洁的方法

虽然上述两种方法都可以实现合成子图的应用需求,但是我们需要的远不止此,我们可能想要更简洁的方法,而plt.subplot()函数就是我们所需要的。

import numpy as np

from matplotlib import pyplot as plt

def get_radius(t, params):

m, n_1, n_2, n_3 = params

u = (m * t) / 4

return (np.fabs(np.cos(u)) ** n_2 + np.fabs(np.sin(u)) ** n_3) ** (-1. / n_1)

grid_size = (3, 4)

t = np.linspace(0, 2 * np.pi, 1024)

for i in range(grid_size[0] * grid_size[1]):

params = np.random.random_integers(1, 20, size = 4)

r = get_radius(t, params)

plt.subplot(grid_size[0], grid_size[1], i+1)

plt.plot(r * np.cos(t), r * np.sin(t), c = ‘c’)

plt.title(‘%d, %d, %d, %d’ % tuple(params), fontsize = ‘small’)

plt.suptitle(“Example of plt.suptitle”)

plt.tight_layout()

plt.show()

更简洁的方法

Tips:plt.subplot()函数接收三个参数,分别为行数,列数,以及子图的位序,直接指定划分网格的方式和需要绘图的位置索引。

等比例缩放坐标轴


默认情况下,Matplotlib对图形的两个轴使用不同的比例,在系列教程学会Python-Matplotlib可视化,快速完成数据分析(5)——自定义坐标轴让统计图清晰易懂中,我们已经看到可以使用plt.axis('scaled')来使坐标轴具有相同比例,这里我们介绍另外一种方法,通过Axes对象修改坐标轴比例。

import numpy as np

from matplotlib import pyplot as plt

t = np.linspace(0, 2 * np.pi, 1024)

plt.axes().set_aspect(‘equal’)

plt.plot(2. * np.cos(t), np.sin(t), c = ‘c’, lw = 1.5)

plt.show()

等效于:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

452090670f48eda180e0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA56iL5bqP5aqb56eD56eD,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-hE8INIP3-1712699580832)]

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值