Matplotlib小白学习-1

小白才刚开始阅读Matplotlib官方文档-1

应该是黄二白吧,虽然有断断续续地使用matploblib(简称mpl),但是什么都记不住,每次都是要什么直接找度娘,写代码的时间成倍增长。每次找的都是不同的人写的代码,天花乱坠的ax.plot和plt.plot,作为小白的我毫无头绪,生搬硬套,心里虚虚,完全没有掌握天下的感觉。作为一个小白,真是克服了自己的拖延症和惰性,认认真真开始阅读matplotlib的官方文档了(年初就把这个目标写进了今年的计划,现在在开始实现)。

总体框架

Matplotlib Turorials
Introductory :初级基础 王昭君成功解锁1技2技
Intermediate: 中级进阶 大招已经好了 开始浪一浪
Advanced: 高级 我已神装 大杀四方
Colors: 颜色
Text: 图中文字 主要是标注
Toolkits: 我还没弄懂

作为小白当然是从入门开始慢慢来,先搞清楚总体框架。按照我现在的理解,matplotlib主要就分成两个部分,图像和文字部分。图像部分囊括了包括了所有绘制图像的函数以及为图像美观服务的axis,color,linewidth等部分;而文字部分,主要就是图中的文字标注。但其实后者也是为图像绘制而服务的,二者交叉,分解也不是太明显,我这里的文字部分☞的就仅仅是关于文中数字标注。

Usage Guide

这部分的阅读主要有三点很重要:

  1. 搞清楚了一个图像的各种组成部分
  2. plt.plot 和 ax.plot的区别
  3. 深刻体会小甲鱼常说的那句话:在python中,一切都是对象!!

figure的组成部分

mpl是一个可以创建figure的库,figure是mpl的终极目标。一个图(figure)可以有多个子图(axes), 一个子图有至少2个坐标轴(axis),万一是三位坐标呢。要严格区分axes与axis, axes不是数学上的axis的复数的意思,它就是指一个子图,一个figure中的一个绘图区域。为了明晰图意,图中必要的会有坐标轴–x,y(,z), 坐标轴的刻度线,网格线,标题等等。所有包含在figure里的东西,也包括figure本身,都是artist。
figure的组成部分
我们可以通过:

fig = plt.figure() 
#创建一个figure,这个figure里面默认只有一个axes,这个axes的内容就是figure的全部内容
#可以通过plt.subplot(211)后续添加;设定有两行一列共2个子图,现在先画第一个,返回第一个子图
#上一行代码也可以通过fig.add.subplot(211)有同样的效果,返回对象是第一个子图

fig, ax = plt.subplots()
#同样的创建一个子图,这里只是把plt.subpots(1)的返回值赋予了fig和ax

fig,axes = plt.subplots(22)
#创建一个2行行列共4个子图

plt.plot和ax.plot的区别

二者Matplotlib绘图的两种方式:
plt通过自动管理figure和axes来生成图片;
ax是面向对象语法的产物。python可以通过首先明确生成图和子图,并调用对应带函数对子图进行修改;

可以参考上面的第一行和第二行代码的区别。就像排队买演唱会门票一样,对于plt就像是三流不知名歌手,没什么人气,来一个人卖就一个,完全不知道销量,来一个就画一个,;对于ax, 就像是泰勒斯威夫特的巡演,销量一定,供大于求。主办方要做的就是把演唱会门票塞到每一个排对的人手里就好了。ax就是知道了图的总量,往里面依次塞东西就好了。
官方文档建议,尽量只是用一种方法绘图。建议交互式绘图采用plt, 如jupyter notebook;非交互式的采用面向对象的绘图方法,比如python script。虽然用jupyter较多,但是我莫名觉得用非交互的方法很好记,但是实际上二者差别不大,基本上你看得到ax.set…之类的就是非交互式的绘图方法了。

python:面向对象的一切

面向对象的一切是指一切东西都有返回值;如果没有,都会返回None。所以,每一个artist都可以用通过返回的artist对象本身来修改其属性;
plt.setp(artist对象,linewidth,color,…) (setp是set_property的简称)

并且还有一些图是只能通过返回的artist对象来设置的,比如:
markline,stemlines,baseline = ax.stem(data,)
时间流线图
具体的还是看看官方文档吧!
官方文档的这一部分还包括了后端、渲染等等,我觉得我暂时还用不上,看了个大概,要是以后有需要还会自己钻研,现在还是能力不够,而且也没有需要,偷偷懒=_=

Pyplot tutorial

Introductory 这一部分就开始简单绘图了,讲述内容集中在2D图的绘制方法,以及其相关属性,并初步涉及了text。我就不pose主要的内容了,记录一下我新学到的知识。

  1. plt.plt()只输入一个数据对象,则把其当作为y值,x值默认从0开始,逐1增加;

  2. Matplotlib 的输入数据最好是np.array, 对于list输入在部分数据操作上可能出现问题;并且,Matplotlib会在函数绘制中把list自动转换成np.array

  3. plt.plot (ax.plot) 不仅仅可以绘制线形图,还可以绘制散点图;并且,在散点属性较为情况下,采用plot比用scatter更快。

  4. 用关键字绘图。当采用data关键字时,绘图时自动提取列名为对应参数的列值作为输入数据。

    data = {'a': np.arange(50),
            'c': np.random.randint(0, 50, 50),
            'd': np.random.randn(50)}
    data['b'] = data['a'] + 10 * np.random.randn(50)
    data['d'] = np.abs(data['d']) * 100
    
    plt.scatter('a', 'b', c='c', s='d', data=data)
    plt.xlabel('entry a')
    plt.ylabel('entry b')
    plt.show()
    

结语

嗯,今天还读了stem, boxplot的绘制方法,一点一点地啃,发现理解得更透彻了。好像还突然打开了新世界的大门,tranform这个东西读了个半懂不懂,反正就是在fig、axes、display之间相互转换,要是想看看想学学怎么画线的阴影的朋友可以读一读transformation tutorials的相关文档。(剧透,用transforms.offset_copy(ax.transData,fig=fig, dx, dy, units=‘inches’) 把像素点大小转换成data unit大小并在图中绘出,跟shapely的parallel有点像)。
我还会继续读下去的,努力做一个政府matplotlob,绘图时键盘飞快的小强人。。。(先挖坑)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值