这一系列文章原载于公众号工程师milter,如果文章对大家有帮助,恳请大家动手关注下哈~
今天我们的目标是学习常用的图形绘制,经过前面的铺垫,现在再来学习这些图形的绘制,就非常的简单了。
一:plot
这是最简单的图,也就是折线。如下代码所示:
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方法,以方便我们的使用。
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的位置。可以这样:
ax.set_title('A Title',
fontdict={"fontsize":20, "color":"blue"},
loc = "right",)
如下图所示:
如果要设置线的颜色,可以在plot方法中直接设置:
ax.plot(..., color = "green", ...)
你问我,都有哪些颜色可用呢?都在这里了:
线型也可以在plot方法中直接设置。
ax.plot(..., linestyle='--', ...)
matplotlib支持如下线型:
二:scatter
散点图,直接看代码:
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 删除。