27 - 如果不用 NumPy 斗图还有神马意思?
本帖最后由 不二如是 于 2020-2-26 16:03 编辑上一讲就算挖了一个坑啦,本次制作好玩的 Emjoy 表情包!
先来看 wiki 给出的定义:
导入库:
在之前的课程用过Matplotlib 很多次啦,它是数据可视化和数据分析工具中最方便,出名的工具。
其中原因就在于:
**** Hidden Message *****
任何人都可以下载 Matplotlib,然后开始绘制自己的专属图像。
结合 NumPy 简直是搞事情的必备搭配!
创建 Matplotlib 变量:
fig 值可通过 plt.figure() 以及参数 figsize=(8,8) 得出, figsize=(8,8) 表示了图表的大小。
add_subplot(1,1,1)表示在 figure 上创建一行一列的子图,并且绘制在第一个子图上面。
如果改成 (2,2,2) 就代表创建两行两列共 4 个子图,接下来的绘图就会绘制在第 2 个子图上。
最后输入 plt.show() 和 plt.grid(),前者表示演示该图像,后者表示显示网格线。
下方的空白画布将用于绘制新的 emoji 。
确定脸型
先确定脸型,然后再画上眼睛和嘴巴。
要创建脸部,可使用代码 ax.scatter() 构建散点图,但只需在画布上绘制一个点。
通过 scatter() 函数,得出以下参数
[*][.5],[.5] 表示点坐标
[*]键入 c = yellow 以及 edgecolor = gold,这两个代码分别表示脸部和边界的颜色。
[*]linewidth 对应边框厚度
[*]s 代表整张图像的面积
实操代码:
眼
完成了一个“大黄饼”似的背景后,开始绘制眼睛。
在原来基础上添加用以绘制眼睛的 ax.scatter() 函数:
调整坐标为 [.37],[.60],当然你也可以根据个人意愿进行调整。
继续输入 c=darkgoldenrod,无需输入边界颜色。
眼睛的面积为 1700 。
眼睛画好啦,稍微有点感觉了。
嘴
眼睛和脸这种圆形可以用 ax.scatter() ,但是嘴巴就要用到 NumPy 啦。
首先确定两个新的变量 X 和 Y,然后使用 ax.plot() 绘制它们的位置:
最后使用 NumPy,导入代码 np.linspace()以及三个参数,得出X = np.linspace(.37, .63, 100) 。
前两个参数表示x轴的起点与终点,而第三个参数则代表这个“笑容”上点的数目(在这张图上共有 100 个点)。
Y = 4 * (X-.5)**2 + 0.3,可以对其四个数字进行修改。
第一个数字 4 表示“笑容”弯曲的角度,如果把这个数字改成负数,最后就会得到“苦瓜脸”。
第二个数字 .5 则稍稍改变了“笑容”的角度。
第三个数字2 即指数,改变了这条线的弧度。
第四个数字 0.3 则负责确定“笑容”在y轴上的位置。
最后导入代码 ax.plot(X, Y, c=’darkgoldenrod’, linewidth=20),在 (X, Y) 变量后紧接颜色参数 c 。
而这里的颜色与眼睛颜色一致,“笑容”线条粗细值为 20 。
眉和眨眼ei
接下来就要在画布上画出眉毛和眨着的眼睛啦。
重复之前的步骤画出三条线:
新图案的代码与之前“笑容”的代码一样,变量名和参数略作改动。
优化
但网格线和轴有点丑,怎么删掉呢?
几行代码:
使用函数 ax.spines.set_visible() 删掉网格线。
在 ax.spines 后面的方括号中填入网格线对应的方向,然后在 set_visible() 的括号中填入False 。
随后再导入代码 ax.set_xticks() 和 ax.set_yticks(),在括号内填上一个没有内容的方括号。
这两个代码可以消除 x 和 y 轴上的数字。
搞定,收工!
下一讲是啥?还没想好...
源代码:
如果有收获,别忘了评分{:10_281:} :
http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif
如果想看更多,请订阅 淘专辑(传送门)(不喜欢更要订阅{:10_297:} ) 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 我就在下面补充 scatter 的用法吧
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
参数说明:
x,y:array_like,shape(n,)
输入数据
s:标量或array_like,shape(n,),可选
大小以点数^ 2。默认是`rcParams ['lines.markersize'] ** 2`。
c:颜色,顺序或颜色顺序,可选,默认:'b'
`c`可以是单个颜色格式的字符串,也可以是一系列颜色 规范的长度为`N`,或一系列`N`数字使用通过kwargs指定的`cmap`和`norm`映射到颜色。请注意,`c`不应该是单个数字RGB或RGBA序列,因为这与数组无法区分值将被彩色映射。 `c`可以是一个二维数组,其中的 行是RGB或RGBA,但是,包括单个的情况行为所有点指定相同的颜色。
marker:`〜matplotlib.markers.MarkerStyle`,可选,默认值:'o'
`marker`可以是 该类的实例或特定文本的简写标记。
cmap:`〜matplotlib.colors.Colormap`,可选,默认:无
一个`〜matplotlib.colors.Colormap`实例或注册名称。
`cmap`仅在`c`是浮点数组时使用。如果没有,默认为rc`image.cmap`。
norm:`〜matplotlib.colors.Normalize`,可选,默认:无
`〜matplotlib.colors.Normalize`实例用于缩放
亮度数据为0,1。`norm`只有在`c`是一个数组时才被使用。如果`None',则使用默认值:func:`normalize`。
vmin,vmax:标量,可选,默认值:无
`vmin`和`vmax`与`norm`结合使用来标准化亮度数据。如果其中任何一个都是`无',那么最小和最大的使用颜色数组。请注意,如果你通过一个“规范”实例,你的`vmin`和`vmax`的设置将被忽略。
alpha:标量,可选,默认值:无
alpha混合值,介于0(透明)和1(不透明)之间,
linewidths:标量或array_like,可选,默认值:无
如果无,则默认为(lines.linewidth,)。
verts:(x,y)的序列,可选
如果`marker`为None,这些顶点将用于构建标记。标记的中心位于 在(0,0)为标准化单位。整体标记重新调整 由``s``完成。
edgecolors :颜色或颜色顺序,可选,默认值:无
如果无,则默认为'face'
如果'face',边缘颜色将永远是相同的脸色。
如果它是'none',补丁边界不会被画下来。
对于未填充的标记,“edgecolors”kwarg 被忽视并被迫在内部“面对”。 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦?我 1111111哈哈哈,以后斗图又有素材啦 https://s1.ax1x.com/2020/04/02/GY9Zgf.png 哈哈哈,以后斗图又有素材啦 本帖最后由 听风夜雨 于 2020-4-5 08:09 编辑
举一反三
'D:\\pic\\2.png' 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦 哈哈哈,以后斗图又有素材啦
页:
[1]