网站排名推广推荐,好动词做的网站能行吗,昆明网站制作代理,网站改版定位策划书各位小表贝#xff0c;你们的画图小老弟又来咯~上一次我们聊到了如何画离散图#xff0c;这一次我们来点复杂的#xff0c;准备好了么#xff0c;系好安全带#xff0c;准备发车咯~滴滴~我们先来点比较简单#xff0c;那种易于上手的。如果现在我知道了两个点的坐标…各位小表贝你们的画图小老弟又来咯~上一次我们聊到了如何画离散图这一次我们来点复杂的准备好了么系好安全带准备发车咯~滴滴~我们先来点比较简单那种易于上手的。如果现在我知道了两个点的坐标那么如何画出一条线呢听起来有点简单过头。首先我们翻开了官网教程的相关页面。matplotlib.lines.Line2D - Matplotlib 3.1.0 documentationmatplotlib.org光是看看参数的数量已经相当复杂了我想申请撤退。别急其实绝大多是辅助性的作用最为重要的是两个参数xdata和ydatamatplotlib.lines.Line2D(xdata,ydata,……)从我们一般的理解上来说确定两个点的坐标就可以画出一条直线比如现在我想画出(0,0)到(1,5)的直线那么是不是我们把这两个点的坐标放进去就OK了呢此刻请允许我东北人上身能动手就憋叨叨。import matplotlib.pyplot as plt
from matplotlib.pyplot import Line2Dfigplt.figure()
axfig.add_subplot(111)
ax.set_xlim(0,5)
ax.set_ylim(0,5)
lineLine2D((0,0),(1,5))
ax.add_line(line)
plt.show()等一下一定是我的开启方式有问题为什么没有画出一根直线从一个资深码农的角度来说这时候应该是系统出现了问题我需要重启计算机。。先别。注意看上面对于Line2D的官方解释这里的xdata和ydata并不是我们常规理解下的两个点的坐标。而是将两个点的x坐标和y坐标分别写成一个数组。import matplotlib.pyplot as plt
from matplotlib.pyplot import Line2Dfigplt.figure()
axfig.add_subplot(111)
ax.set_xlim(0,5)
ax.set_ylim(0,5)
lineLine2D((0,1),(0,5))
ax.add_line(line)
plt.show()其实啥都没变只是把Line2D((0,0),(1,5))变成了Line2D((0,1),(0,5))为了显得专业一些我把代码重新贴了一份而已。来再试一次。棒想给自己鼓掌怎么着我自己写文章还不能给自己加戏了接下来我们再来看看如何画一个圆。还是从常规理解来说一个圆最重要的也就是圆心以及半径。matplotlib的官方团队一定是窃取了我的想法竟然和我的认知不谋而合。https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.patches.Circle.htmlmatplotlib.org虽然依然有着肥肠多的参数但是我并不关心注意看matplotlib.patches.Circle(xy,radius5,**kwargs)这里的xy比较明显的代表了应该用一个tuple来表示一个圆心的坐标。tuple是啥还不先去把python的基础课程补一补来我们继续动手画起来。import matplotlib.pyplot as plt
from matplotlib.patches import Circlefigplt.figure()
axfig.add_subplot(111)
cirCircle((3,3),radius2)
ax.add_patch(cir)
plt.show()这是在和我开玩笑么这TM也敢自称是个圆我一个漂亮的回旋踢应该也比这个圆吧。漂亮的回旋踢--双节棍当然究其原因。x轴和y轴的范围不同一个是0到5一个是0到10这整个坐标系看起来就像是一个长方形即使画出来的是一个正圆也会被压缩成椭圆。咱们一一解决。首先对于x,y轴范围的问题可以去设置axis的范围axis是啥去看上一篇。figplt.figure()
axfig.add_subplot(111)
ax.set_xlim(0,10)
ax.set_ylim(0,10)而如何将一个axis设置为一个正方形的显示区间就需要去网上找答案了。最终千辛万苦会发现对于axis而言有一个方法可以设置它的aspectax.set_aspect(num)这里的num则是x,y轴的长宽比如果我们想得到一个正儿八经的正方形num填写1修改一下代码再跑一次试试。棒仔细对比上下两张图你会发现之前椭圆的那张图确实不是一个正方形。而且可以负责任的说matplotlib直接拿来画图而不去调整aspect的画你一定画不出一个正圆。好像说的有点满。目前来说我相信你已经知道了如何绘制圆以及直线了那咱们玩点有难度的。我们用仅有的一些知识来画出一幅人工智能中神经网络的连接图。那是个啥我们先看看结果。就是它了。简单来说我们把这些圆分为了3层第一层3个第二层5个第三层6个。然后每一层与每一层之间有一个全连接的关系。全连接是啥嗯。。比如下图这样就是一个点对于下一层的全连接。是不是已经兴奋的搓手手了来咱们先考虑考虑这么一个看起来比较复杂的东西该怎么画。是不是想起了数学书上的课后练习学会了11立马就得会做823944121。首先来说这套图形充满了各种重复劳动而一切的重复劳动在代码面前都是纸老虎。编码的意义是什么就是懒人给自己找到了一个偷懒的方法啊。从一个编码人员的角度来说现在是3层的网络但是我希望用一套代码可以解决3层10层甚至30层并且只需要改动一个参数就行了其他的我都不想改因为懒安排经过首轮简单分析你可以很轻松的发现对于圆以及直线而言他们共用了所有的点。也就是说两个直线连接的就是两个圆心所以如果我们可以直接把所有圆心的位置都找到并且储存成一个数组那不就万事大吉了么对就是这么简单。就拿我们现在这个3层分布来说那么一张画布就可以被三等分为三个部分。这么看起来现在每一个圆心的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用的多都应该知道啥叫居中排布。这么看来每一个圆所在格子的高度应该以圆的个数最多的那一层为准。比如这时候是第三层的6个如果其他层有更多呢比如我们再画一个。那这时候就会以9作为基准。所以目前的第一目标就是找出哪一层的圆比较多。如果你要用冒泡算法或者其他的一些排序算法去找也不是说不可以不过numpy中有一个方法用起来比较方便。比如。import numpy as npa[1,3,5,2,56,4]
bnp.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):ylimax1.get_ylim()[1]xlimax1.get_xlim()[1]each_levelnp.array(each_level)each_colxlim/((len(each_level)))each_rowylim/np.amax(each_level)radius0.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)resultlist()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[i1]:# your code here figplt.figure()
ax1fig.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()如果喜欢请记得点赞收藏加关注哦~么么哒~有一小段代码我懒得抽离出方法了哈哈反正懒就对了。