前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >matplotlib使用教程(四):常用图形绘制和调优

matplotlib使用教程(四):常用图形绘制和调优

原创
作者头像
云时之间
修改2020-11-30 14:31:10
9800
修改2020-11-30 14:31:10
举报
文章被收录于专栏:云时之间云时之间

这一系列文章原载于公众号工程师milter,如果文章对大家有帮助,恳请大家动手关注下哈~


今天我们的目标是学习常用的图形绘制,经过前面的铺垫,现在再来学习这些图形的绘制,就非常的简单了。

一:plot

这是最简单的图,也就是折线。如下代码所示:

代码语言:javascript
复制
fig = plt.figure()
ax = fig.subplots()
x = np.arange(0, np.pi*2, 0.05)
y = np.sin(x)
ax.plot(x, y)
ax.set(xlim=[0, 3.5], ylim=[0, 1], title='An Example Axes',
       ylabel='Y-Axis', xlabel='X-Axis')
plt.show()

图形如下:

通过图形可以看到,xlim、ylim,title、ylable、xlabel这些都是在Axes中进行设置的,学习完前面的知识,你会感觉这样的安排是很自然的。

同时,针对每一个设置,Axes都有单独的set方法,以方便我们的使用。

代码语言:javascript
复制
ax.set_xlim([0, 3.5])
ax.set_ylim([0, 1])
ax.set_title('A Different Example Axes Title')
ax.set_ylabel('Y-Axis (changed)')
ax.set_xlabel('X-Axis (changed)')

这种单独设置的好处在于,可以针对每一个设置项进行更细粒度的设置,比如如果想设置title的字体大小,并设置title的位置。可以这样:

代码语言:javascript
复制
ax.set_title('A Title',
fontdict={"fontsize":20, "color":"blue"},
loc = "right",)

如下图所示:

如果要设置线的颜色,可以在plot方法中直接设置:

代码语言:javascript
复制
ax.plot(..., color = "green", ...)

你问我,都有哪些颜色可用呢?都在这里了:

线型也可以在plot方法中直接设置。

代码语言:javascript
复制
ax.plot(..., linestyle='--', ...)

matplotlib支持如下线型:

二:scatter

散点图,直接看代码:

代码语言:javascript
复制
import math
fig = plt.figure()
ax = fig.subplots()
x = [0,2,4,6,8,10,12,14,16,18]
s_exp = [20*2**n for n in range(len(x))]
s_square = [20*n**2for n in range(len(x))]
s_linear = [20*n for n in range(len(x))]
ax.scatter(x,[1]*len(x),s=s_exp, label='$s=2^n$', lw=1)
ax.scatter(x,[0]*len(x),s=s_square, label='$s=n^2$')
ax.scatter(x,[-1]*len(x),s=s_linear, label='$s=n$')
ax.set_ylim([-1.5,1.5])
ax.legend(loc='center left', bbox_to_anchor=(1.1, 0.5), labelspacing=3)
plt.show()

图如下:

上面的代码中,我们看到:

matplotlib允许我们控制每一个点的大小,这是通过scatter中的s属性确定的。

label属性的作用是,当一个Axes中有多个图时,用来标记在图例中,比较厉害的是,这里允许使用latex语法,再次体现了matplotlib的强大。

三:legend

legend的位置确定是个重要却有点复杂的设置,我们单拎出来说说。matplotlib确定legend的位置实际上有两套逻辑,而且两套逻辑同时用到 loc 和 bbox_to_anchor。这是造成混乱的根本原因。

第一套逻辑

先用bbox_to_anchor确定一个方框,loc是legend在这个方框中的位置。

确定方框的bbox_to_anchor需要是一个四元组(x,y,width, height)。里面的数值都是相对Axes的比例坐标。比如其默认值是(0,0,1,1),代表的是整个Axes。(0,0,0.5,0.5)代表的是Axes的左下四分之一的矩形框。

loc是legend在这个方框中的位置,可以使用的位置如下所示:

第二套逻辑

这套逻辑是先用bbox_to_anchor确定一个点,然后loc表示的是这个点相对legend的位置。这个逻辑就有点绕了。我们可以通过图来感受一下。

bbox_to_anchor是(0.6,0.5)时,即下图中的绿点位置,不同的loc确定的legend的位置:

只要理解了这两套逻辑,就不会混乱了。

好了,今天的内容先到这里,我们下次继续。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档