html画图代码_python之matplotlib画图教程(2)

58c98a7da849254053025168b936a799.png

各位小表贝,你们的画图小老弟又来咯~

560497b811f9d8c12d9e997a40608c67.gif

上一次我们聊到了如何画离散图,这一次我们来点复杂的,准备好了么,系好安全带,准备发车咯~滴滴~

a6502a0af5fb8741373e500d24e75343.png

我们先来点比较简单,那种易于上手的。

如果现在我知道了两个点的坐标,那么如何画出一条线呢?听起来有点简单过头。

首先,我们翻开了官网教程的相关页面。

matplotlib.lines.Line2D - Matplotlib 3.1.0 documentation​matplotlib.org
e55ac476b664619966c0233302b24b0d.png

光是看看参数的数量已经相当复杂了,我想申请撤退。

5e717899c46f4d0af3fe779c1b0b91e4.png

别急,其实绝大多是辅助性的作用,最为重要的是两个参数xdata和ydata

matplotlib.lines.Line2D(xdata,ydata,……)

从我们一般的理解上来说,确定两个点的坐标,就可以画出一条直线,比如现在我想画出(0,0)到(1,5)的直线,那么是不是我们把这两个点的坐标放进去就OK了呢?

此刻请允许我东北人上身,能动手,就憋叨叨

import matplotlib.pyplot as plt
from matplotlib.pyplot import Line2Dfig=plt.figure()
ax=fig.add_subplot(111)
ax.set_xlim(0,5)
ax.set_ylim(0,5)
line=Line2D((0,0),(1,5))
ax.add_line(line)
plt.show()

69faa41d24e27370e80a9b70bf06ea26.png

等一下!一定是我的开启方式有问题,为什么没有画出一根直线?从一个资深码农的角度来说,这时候应该是系统出现了问题,我需要,重启计算机。。

a1f79a7b6b0e1ace575a69e6efeb686e.png

先别。注意看上面对于Line2D的官方解释,这里的xdata和ydata,并不是我们常规理解下的两个点的坐标。而是,将两个点的x坐标和y坐标分别写成一个数组。

import matplotlib.pyplot as plt
from matplotlib.pyplot import Line2Dfig=plt.figure()
ax=fig.add_subplot(111)
ax.set_xlim(0,5)
ax.set_ylim(0,5)
line=Line2D((0,1),(0,5))
ax.add_line(line)
plt.show()

其实啥都没变,只是把Line2D((0,0),(1,5))变成了Line2D((0,1),(0,5)),为了显得专业一些,我把代码重新贴了一份而已。

来,再试一次。

54ea3a9e0fcc6fc8f04eb7843cac0e3e.png

棒!想给自己鼓掌!(怎么着,我自己写文章还不能给自己加戏了??)

8366d99340ab1f7e86805f4321e382c2.png

接下来,我们再来看看如何画一个圆

还是从常规理解来说,一个圆最重要的也就是圆心以及半径。matplotlib的官方团队一定是窃取了我的想法,竟然和我的认知不谋而合。

f3b152737798b86122b8ed6101fb37c8.png
https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.Circle.html​matplotlib.org

虽然依然有着肥肠多的参数,但是我并不关心,注意看

matplotlib.patches.Circle(xy,radius=5,**kwargs)

这里的xy比较明显的代表了,应该用一个tuple来表示一个圆心的坐标。(tuple是啥?还不先去把python的基础课程补一补?)

来,我们继续动手画起来。

import matplotlib.pyplot as plt
from matplotlib.patches import Circlefig=plt.figure()
ax=fig.add_subplot(111)
cir=Circle((3,3),radius=2)
ax.add_patch(cir)
plt.show()

ae165a19767a9987daa9c6710ea6777a.png

这是在和我开玩笑么?这TM也敢自称是个圆?我一个漂亮的回旋踢应该也比这个圆吧。

01c4eb1c2942398e66951f2bd4c504ba.png
漂亮的回旋踢--双节棍

当然究其原因。

  1. x轴和y轴的范围不同,一个是0到5,一个是0到10
  2. 这整个坐标系看起来就像是一个长方形,即使画出来的是一个正圆,也会被压缩成椭圆。

咱们一一解决。

首先,对于x,y轴范围的问题,可以去设置axis的范围(axis是啥?去看上一篇)。

fig=plt.figure()
ax=fig.add_subplot(111)
ax.set_xlim(0,10)
ax.set_ylim(0,10)

而如何将一个axis设置为一个正方形的显示区间,就需要去网上找答案了。

最终千辛万苦,会发现对于axis而言,有一个方法可以设置它的aspect

ax.set_aspect(num)

这里的num则是x,y轴的长宽比,如果我们想得到一个正儿八经的正方形,num填写1,修改一下代码再跑一次试试。

96b27156e67e9b6a5c76e4c288c25b96.png

棒!仔细对比上下两张图,你会发现之前椭圆的那张图,确实不是一个正方形。而且可以负责任的说,matplotlib直接拿来画图而不去调整aspect的画,你一定画不出一个正圆。(好像说的有点满。)

39ab7087a13fb7c1e6f4b8e4e84076c1.png

目前来说,我相信你已经知道了如何绘制圆以及直线了,那咱们玩点有难度的。

我们用仅有的一些知识,来画出一幅人工智能中神经网络的连接图。那是个啥?我们先看看结果。

585600265b44e553704800ea19df5c03.png

就是它了。简单来说,我们把这些圆分为了3层,第一层3个,第二层5个,第三层6个。然后每一层与每一层之间有一个全连接的关系

全连接是啥?嗯。。比如下图这样,就是一个点对于下一层的全连接

131dc4ed60c306656547bcc013d8e041.png

是不是已经兴奋的搓手手了?来,咱们先考虑考虑,这么一个看起来比较复杂的东西,该怎么画。(是不是想起了数学书上的课后练习?学会了1+1立马就得会做8239+44121。)

11269fdbb515e75632c76cd51ae6927c.png

首先来说,这套图形,充满了各种重复劳动,而一切的重复劳动在代码面前都是纸老虎。编码的意义是什么?就是懒人给自己找到了一个偷懒的方法啊。

从一个编码人员的角度来说,现在是3层的网络,但是我希望用一套代码,可以解决3层,10层,甚至30层,并且只需要改动一个参数就行了,其他的我都不想改,因为,懒!

安排!

经过首轮简单分析,你可以很轻松的发现,对于圆以及直线而言,他们共用了所有的点。也就是说,两个直线连接的就是两个圆心,所以如果我们可以直接把所有圆心的位置都找到,并且储存成一个数组,那不就万事大吉了么?

对,就是这么简单。

d44a0aa996f51830cef71b38f058b9c1.png

就拿我们现在这个3层分布来说,那么一张画布,就可以被三等分为三个部分。

329bc479e866740e3c39d2cc5fb620fe.png

这么看起来,现在每一个圆心的x轴坐标,可以确定下来了。

但是现在x轴范围是0到10,我希望如果是0到100也不会影响到我的算法。话句话来说,现在第一层的x轴坐标应该是1.66(怎么算的?自己动动脑子。)如果这时候x的范围是0到100,那么第一层的x轴坐标就应该是16.6。

所以我需要去动态的进行计算,不应该把这个10当做一个固定值进行计算。

比较幸运的是,我们可以通过调用ax.get_xlim()和ax.get_ylim()来获取到x轴与y轴的范围,比如以当前情况而言,会返回一个(0,10)的tuple。

所以这么看起来,如果我按照x轴的长度,除以层数,就可以获取每一层应该有多宽了。完美!当然圆心和直线的一端就是在每一层x数值的中心咯。

那么对于y轴该如何分呢?以当前的[3,5,6]而言,那我们必然想让他的排布好看一些,如果office用的多都应该知道啥叫居中排布。

bf53fca4d0ae9c516dcfecf4657d10fe.png

这么看来,每一个圆所在格子的高度,应该以圆的个数最多的那一层为准。比如这时候是第三层的6个,如果其他层有更多呢,比如我们再画一个。

82ad7ca3ec76b493f2d74936af3a3787.png

那这时候就会以9作为基准。所以目前的第一目标就是找出,哪一层的圆比较多。

如果你要用冒泡算法或者其他的一些排序算法去找,也不是说不可以,不过numpy中有一个方法,用起来比较方便。比如。

import numpy as npa=[1,3,5,2,56,4]
b=np.amax(a)
Out[]: 56

那么好了,现在好像难题都已经被解决了,剩下的就是用各种循环去画图了。当然这一次我会先给出部分代码,我更希望你可以自己动手画一画。完整版的代码会在下一篇文章中以彩蛋的形式发布。(剧透了还能叫彩蛋么?)

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from matplotlib.pyplot import Line2Ddef draw_level(each_level):ylim=ax1.get_ylim()[1]xlim=ax1.get_xlim()[1]each_level=np.array(each_level)each_col=xlim/((len(each_level)))each_row=ylim/np.amax(each_level)radius=0.4*each_rowfor i,item in enumerate(each_level):# your code heredef draw_line(each_level):ylim = ax1.get_ylim()[1]xlim = ax1.get_xlim()[1]each_level = np.array(each_level)each_col = xlim / ((len(each_level)) )each_row = ylim / np.amax(each_level)result=list()for i, item in enumerate(each_level):# your code herefor i in range(len(each_level)-1):for item in result[i]:for i_next in result[i+1]:# your code here fig=plt.figure()
ax1=fig.add_subplot(111)
ax1.set_xlim(0,10)
ax1.set_ylim(0,10)
ax1.set_aspect(1)
each_level=[3,5,9,6]
draw_line(each_level)
draw_level(each_level)
plt.show()

如果喜欢请记得点赞收藏加关注哦~么么哒~(有一小段代码我懒得抽离出方法了,哈哈,反正懒就对了。

7868d6a9e7625320fba60a89a3c49e5b.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python图像识别代码_用Python进行简单图像识别(验证码)

这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt文件中 #-*-encoding:utf-8-*- import pytesseract from PIL import Image class GetImageDate(ob…

c++ map初始化_Go学习每日一问(18)-map元素查找

每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下go中的一个知识点:map元素查找日省吾身1.下面代码中 A B 两处应该怎么修改才能顺利编译?func main() { var m map[string]int //A m["a"] 1 if v : m["b&q…

-bash: wget: 未找到命令_18个堪称神器的命令行工具,高效运维必备

上期入口:24个 CSS 高级技巧合集提示:因公众号不支持超链接,上图所有项目地址,可在公众号后台回复关键字 “命令行工具” 获取。thefuck命令行打错了以后,打一个fuck就会自动纠正。GitHub:https://github.c…

linux编辑java文本,linux下的文本编辑器VI的使用命令

1、 移动光标H        #移到屏幕的左上角M         #移到屏幕的中间行开头L          #移到屏幕的最后一行[         #移到文件开始位置 (双击)]         #移到文件结束位置(双击):n         #移到文件的第n行Ctrl b     …

python3.8.0安装_Python3.8.0

Python3.8.0是一款广受程序员欢迎的编程语言,也是面向对象的一款设计语言,Python以其语言的灵活和简易性,具有非常简捷而清晰的语法特点,在脚本工具、数据分析、web后端等等领域都有着优良的表现,收到了大家的广泛应用…

cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】轮廓面积与长度

本文首发于“小白学视觉”微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《OpenCV 4开发详解…

python自定义安装哪些不需要_【1】python模块:自定义模块的3种导入方式

一、定义 模块就是用一堆的代码实现了一些功能的代码的集合,通常一个或者多个函数写在一个.py文件里,而如果有些功能实现起来很复杂,那么就需要创建n个.py文件,这n个.py文件的集合就是模块。如果不懂可以先看下面这篇博文&#xf…

linux划分root_vg,為Linux添加新硬盤,划分LVM分區

1、為VM添加兩塊SCSI硬盤→→完成后重啟VM→→運行fdisk -l,可以看到系統自動將添加的硬盤識別為/dev/sdb和dev/sdc.2、分區對sdb和sdc進行分區,並調整分區類型為8e(LVM類型),sdb划分為sdb1,sdb2,sdc划分為sdc1,sdc2,sdc3[rootpromote ~]# fdisk /dev/sd…

python文件输入符_python读入文件时加r的作用?

r’xxx’ 的含义 **加 r 会把字符串转变为非转义的原始字符串。**比较常用。 例如:print(D:\\test\\test.txt)print(rD:\\test\\test.txt)print(rD:\test\test.txt)123 结果是:D:\test\test.txt D:\\test\\test.txt D:\test\test.txt123 从结果看来&…

linux kvm切换器,KVM切换器是什么,看懂这一篇就够

原标题:KVM切换器是什么,看懂这一篇就够在服务器机房的机架不便于存放多个显示器和键盘的空间里,KVM切换器起着重要的作用。KVM切换器能从本地或远程监视与控制多个计算机与服务器,由键盘、鼠标和显示屏组成的KVM控制台是最方便和…

linux 信号_Linux信号量(1)-SYSTEM V

​信号量概念信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据为…

python画图库哪个好_机器学习基础5--python画图库matplotlib(上)

图像是我们最直观的数据表达方式,python的matplotlib库可以用来画图。下面来简单总结下matplotlib的使用方法。上篇讲matplot画图中用到的基础对象,包括图像Figure,平面曲线Line2D,坐标轴Axes,图例Legend, 注解Annotat…

python怎么加图片_python中如何保存图片

一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1、不开源,价格贵 2、软件容量大。一般3G以上,高版本甚至达5G以上。 3、只能做研究,不易转化成软件。python学习网,大…

西门子触摸屏修改ip地址_基于博途V15 西门子S7-1200与触摸屏一个简单的例子

本篇是《基于博途V15 西门子S7-1200 ...》系列的后续篇,看懂本篇文章之前请大家关注我,然后查找相关文章,学习之后再学习此篇。也请专业领域的大神批评指正。感谢大家关注与支持!步骤:1. 创建项目创建名称为PLC_HMI2. …

mac os和linux和安卓,在我的安卓手机里,安装Windows和macOS系统

原标题:在我的安卓手机里,安装Windows和macOS系统不知道各位差友还记不记得,世超前阵子分享过一款无需越狱,就能让 iPhone 和 iPad 运行其它系统的虚拟机软件 UTM。当时世超正是靠着这个软件,才得以让 iPad 成功跑上了…

gc java root_C#技术漫谈之垃圾回收机制(GC)

GC的前世与今生虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久。早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现。Lisp的程序员认为内存管理太重要了,所…

北航软件工程硕士_21考研择校 | 北京航空航天大学软件工程怎么样?

☝☝☝ 软件工程考研独家平台撰稿 | 康康哥编辑 | 丽丽姐本文由懂计算机、软件工程的博士师哥原创01学校名气北京航空航天大学,简称“北航”,是一所把“985”、“211”、“双一流”写进骨子里的学校。为什么这么说呢?这得从源头说起&#xff…

kettle同步数据到hive 巨慢_超详细教程,kettle ETL mysql到hadoop hive数据抽取,值得收藏...

那么如何将mysql数据导入到hive里呢,kettle里有自带方法,可以通过表输入和表输出来实现,不过自带的方法载入数据极其缓慢,不推荐使用这种方法。1、hive建表注意hive表使用“^”作为分隔符,这个可以更具实际情况来。2、…

linux 查看path文件,linux入门之环境变量与文件查找

环境变量分类当前 Shell 进程私有用户自定义变量,如上面我们创建的 temp 变量,只在当前 Shell 中有效。Shell 本身内建的变量。从自定义变量导出的环境变量。declare tmp;tmp"shiyanlou i love y";echo $tmp ; **不要忘记$**实验楼…

python手机编译器可以干什么_世界上最好的Python编辑器是什么?

在这种情况下,你需要使用一个 IDE(集成开发环境)或专用的代码编辑器。由于 Python 是最流行的编程语言之一,IDE 的选择也非常多。那么问题来了:「究竟什么样的 IDE 最适合 Python?」 很明显,没有…