社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

开学季,教你用 Python 画大学教室座位神分区图!网友直呼“中枪”

进击的Coder • 7 年前 • 1029 次点击  

转载来源

公众号:恋习Python

“

阅读本文大概需要 5 分钟。


”

我们上过大学的朋友们都知道,大学没有固定教室也没有固定的座位,所以大家可以随便找个自己喜欢的位置坐下。


别看这些不起眼的座位,感觉没什么差别。其实,它们可是隐藏着许多小秘密的哦~虽然这些座位,没有什么差别,但是他们可以反映出你在学校里面属于学霸还是学渣,一目了然。


网上曾有这样一张神奇的教室座位分区图,网友直呼“中枪”!


图摄:张孟迪

修图:丁彦斌


从“神座位表”中可以看到,一间教室被划分成了“学霸区”、“妹纸区”、“考神区”、“女神区”、“睡神区”、“LOL 队友区”和“深藏功与名”等十个不同的区域。


一贯作风!恋习 Python 这就用 Python 给大家画这幅有趣的神分区图,看看是不是跟你的情况一样呢?


基本思路:我们将画布分成若干子画布,这些子画布构成绘图区域,在这些绘图区域上分别绘制图形,这就让我们想到函数 subplot2grid() 的使用方法。


plt.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs)


通过使用 subplot2grid() 函数的 rowspan 和colspan 参数可以让子区跨越固定的网格布局的多个行和列,实现不同的子区布局。


值得注意的是,图形位置的索引起点是从 0 开始算起的,而不是像子区函数 subplot() 中的图形位置是从 1 开始算起的。


比如我们要画一张讲堂图片,区域大小为(3,3),起始位置为(0,0),跨区域只在行方向延伸 3,详情代码如下:

import matplotlib.pyplot as pltimport matplotlib as mpl  mpl.rcParams["font.sans-serif"]=["SimHei"]  mpl.rcParams["axes.unicode_minus"]=False  
plt.subplot2grid((3,3),(0,0),colspan=3)plt.text(0.5,0.5,"讲堂",ha="center",fontsize=25)
plt.subplot2grid((3,3),(1,1),colspan=1)plt.text(0.5,0.5,"学霸区",ha="center",fontsize=20)


结果图如下:


理解了函数 subplot2grid() 基本使用方法后,再回头看看那张神分布图,我们可将其区域大小为 (6,8),大小是由自己设计,没有固定。可依次按照迟到党、睡神、深藏功与名等顺序,画每一类所属的区域。


详情代码如下:


import matplotlib.pyplot as pltimport matplotlib as mpl  mpl.rcParams["font.sans-serif"]=["SimHei"]  mpl.rcParams["axes.unicode_minus"]=False  
plt.subplot2grid((6,8),(0,0),colspan=2,fc='red')plt.text(0.5,0.5,"迟到党",ha="center",fontsize=15)
plt.subplot2grid((6,8),(0,2),colspan=4,fc='LightGrey')plt.text(0.5,0.5,"睡神" ,ha="center",fontsize=20)
plt.subplot2grid((6,8),(0,6),rowspan=2,colspan=2)plt.text(0.0,0.5,"深藏功与名",va="center",fontsize=15)
plt.subplot2grid((6,8),(1,0),colspan=2,rowspan=2)plt.text(0.5,0.5,"考神",ha="center",fontsize=15)
plt.subplot2grid((6,8),(1,2),colspan=4,rowspan=2,fc='Green')plt.text(0.5,0.5,"LOL队友",ha="center",fontsize=20)
plt.subplot2grid((6,8),(2,6),rowspan=2,colspan=2,fc='Moccasin')plt.text(0.5,0.5 ,"忧伤少年",ha="center",fontsize=15)
plt.subplot2grid((6,8),(3,0),colspan=2,rowspan=2,fc='pink')plt.text(0.5,0.5,"女神",ha="center",fontsize=15)
plt.subplot2grid((6,8),(3,2),colspan=4,fc='Crimson')plt.text(0.5,0.5,"学霸",ha="center",fontsize=15)
plt.subplot2grid((6,8),(4,2),colspan=6,fc='Orange')plt.text(0.5,0.5,"妹子区",ha="center",fontsize=15)
plt.subplot2grid((6,8),(5,0),colspan=8,fc='yellow')plt.text(0.5,0.5 ,"伪学霸区",ha="center",fontsize=20)
plt.suptitle("大学教室座位神分区图",fontsize=20)plt.savefig(r'C:\Users\Administrator\Desktop\zuowei.png')plt.show()


最终成品如下:


惊不惊喜,意不意外?


关于颜色的填充,可根据自己的喜欢颜色来设计,具体可参考 RGB 颜色值与十六进制颜色码转换工具,链接:

https://www.sioe.cn/yingyong/yanse-rgb-16/


文中,还用到函数 suptitle() 是绘制 Figure 画布标题的文本内容,text() 是设置文字说明。在这里主要说说,text 语法使用


text(x,y,string,fontsize=15,verticalalignment="top",horizontalalignment="right")


参数说明:

x,y:表示坐标值上的值

string:表示说明文字
fontsize:表示字体大小
verticalalignment:垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]
horizontalalignment:水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]


好了,大学里面的教室座位分区用 Python 画就是这样了,哈哈哈,是不是忒简单,一个 subplot2grid() 就搞定。


最后,说说关于迟到党,至于迟到的嘛,没得挑,就哪儿有空位,自觉补去吧!我可是深有体会呀


推荐阅读

1

跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

2

跟繁琐的模型说拜拜!深度学习脚手架 ModelZoo 来袭!

3

只会用Selenium爬网页?Appium爬App了解一下

4‍‍

妈妈再也不用担心爬虫被封号了!手把手教你搭建Cookies池


崔庆才

静觅博客博主,《Python3网络爬虫开发实战》作者

隐形字

个人公众号:进击的Coder

长按识别二维码关注

点

这里“阅读原文”,查看更多

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29480