发布时间:2022-10-08 12:30
之前说要插播一期画图心得,所以本期就介绍一下一些常见图的画法~为了get文末gif的合成和倒放的小彩蛋,还简单学了一个关于处理图片的库”
[emmmmm,比如这样.......]
01
—
画图方法
下面详细介绍直方图的参数设置,其它类型的图类似.
1. Figure 和 Subplots "二选一"
首先建立画布,设置大小颜色,画图的时候有两种方法,一种是通过添加子图的方法(可以画一幅或多幅画),一种没有运用子图(画布中只有一幅图).
没有用到子图的方法:
画柱状图就是一个函数(plt.bar),其实,线图是(plt.plot),散点图是(plt.scatter),箱线图是(plt.boxplot)....
下面是用到子图的方法:
可以看出,添加子图之后,不过是将画图对象变成了某个特定的子图,方法还是一致的(在一些参数设置上有稍微不同),当然如果你不设置subplots(2,2),而是设置成(1,1)或者不设置参数,都只生成一个图,和第一个图的效果一样.
2.关于 Figure 和 Subplots 的 Tips
在plt.figure中设置的背景色只限于输出在屏幕上,savefig()里只有再一次设置背景色facecolor才可以在保存的图片中加入背景色,此处颜色可以和开头在plt.figure中设置的颜色不同.
plt.savefig( )必须写在plt.show( ) 的前面,否则输出是一个白板.
plt.subplots( )可以生成两个对象,一个是figure,一个是subplots,不写参数默认是1*1,所以写参数的画,一定要是两个整数.子图的索引与列表索引方法一致.
关于subplots的参数中,重要的参数是sharex,sharey,如果各个子图之间共享x和y轴,仅留下最下面和最左边的坐标.
3.其他参数设置
以建子图的方法为例,接下来对柱状图进行标签,网格线,标题等等的完善(以下所有的用法在其他图中一样适用).
在ax.bar()的参数中添加柱的宽度width,bottom指的是y轴的开始位置(在stacked-bar堆积柱状图时常用到),颜色color, 边界颜色edgecolor
修改x轴的刻度以及设置刻度标签分别使用set_xticks()和set_xticklabels(),比如上图中x轴的刻度是默认生成的,并没有列出列表a的值,可以通过set_xticks()修改.set_xticks( )就是指明将刻度线放在哪些位置上(就是设置把哪几个坐标点露出来),set_xticklabels就是在这些位置上加上标签,y轴一样的方法
设置坐标轴,例如将图中右侧和上侧的边框线去掉
添加x和y轴的标签,使用set_xlabel( )和set_ylabel( )
添加网格线grid( ),可以设置线型,颜色,沿着x轴画还是y轴画网格线
添加图例(legend( ))和标题(set_title( )),图例的参数在ax.bar( )中通过label=(“ ”)传入。
当然,你还可以更华丽一点,比如这样:(在对子图进行画图时ax.bar( ),传入的color可以是一个颜色列表)
4.关于不同类型柱状图以及遇到的问题
比如画了30条柱子,手动输入set_xticklabels比较麻烦,其实可以读取文件,将其写入一个列表,这样在设置刻度标签时只需要传入列表名称就可以了.
关于堆叠柱状图,上面提到的把bottom参数设置成为第一组数据的y值就可以了,当然更准确一点,你还可以加上误差线(就是第二组数据的y轴在第一组y轴的基础上绘制).
关于并列柱状图,只需要保证他们的x坐标刚好相差一个宽度即可.
所以在画图的时候第一组数据的x减去宽度的一半,第二组数据加上宽度的一半就可以了.
想要在图中加上文本或者对应的数值信息,可以用ax.text( )完成
[总结] 当然不同的图中会涉及到独有的参数,比如点图中设置点的形状等等,不过就是举一反三大同小异罢了~官方文档上除了常见的几类之外,还有热图,小提琴图等等的详细代码~
[reference]matplotlib.pyplot官方文档:https://matplotlib.org/index.html
02
—
pillow库
接下来就简单看一眼pillow库,如何对图像继续压缩、改变大小、切割一部分、换模式and改格式。
功能很很容易实现的,要是还不满意,你甚至还可以加一点滤镜(硬核P图~)引入ImageFilter即可。
最后就是关于gif动图的处理,gif 的拆分、倒放、合并~
合成图片效果(随手几张图emmmm):
倒放GIF效果图(好魔性aaaaaa):
[reference]https://pillow.readthedocs.io/en/latest/
想看生物狗如何在编程中求生存?
欢迎关注我的公众号:听见我的voices