昨天事情有点多,没来得及写,今天写,从今天开始,我所有的代码全部用VScode写,因为我发现,用Pycharm写这些,真的是大材小用了,所以,就简单一些,直接用VScode来写。
今天开始学习绘图,相信看过我之前fortran学习系列的朋友都知道,那时候我就已经在用python作图了,但是,审美问题,图做的太难看了,但是,不管是论文写作,还是其他工作,图像都以其简单明了易懂的特点为人所接受,作用非常大的,漂亮的图像会给人非常好的印象,所以,作图还是很重要的,因此,图像才作为一个重点被Python科学计算作为一个独立的篇章来讲解。
今天就来学习图形的绘制
讲到python绘图,始终绕不开一个包:Matplotlib,这个c++也有扩展,配置好之后就嫩用c++直接调出函数来绘图,特方便的,然后,先把matplotlib的官方文档地址给大家贴上,毕竟书上讲的只是实用性,不会涉及太多的函数。所以,还是要多读读官方文档的:教程 — Matplotlib 3.7.1 文档
ok废话不多说了,直接开始吧:
绘制一个很简单的波形:Ricker子波:代码用的是(3条消息) Python实现雷克子波画图(时间域)_python 生成不同相位的雷克子波_某崔同学的博客-CSDN博客里的,然后看一看做出的图像的效果:
![](https://img-blog.csdnimg.cn/img_convert/b62b8a8d33d962143d66cae25045a53a.png)
图一:雷克子波图像
这会注意哈,雷克子波和那个小波变换用到的墨西哥帽波形非常像,但是别搞混了。
来,跟着书上的敲一个:
import matplotlib.pyplot as plt
import numpy as np
import math
x=np.linspace(-np.pi,np.pi,101)
y=np.sin(x)+np.sin(3*x)/3.0
plt.plot(x,y,"r-")
plt.xlabel("x")
plt.ylabel("y")
plt.title("A Simple Image")
plt.show()
plt.savefig("foo.pdf")
图像:
![](https://img-blog.csdnimg.cn/img_convert/31c5d9790f9d402be916be63e06a23c1.png)
图二:书上的第一个小例子
面向对象的Matplotlib:
这个包的功能远远比你想象的强大得多,他的实现方式是使用嘞的面向对象的方式;
一个matplotlib,他是有两个很基础的类:figure、axes,前者是画布,后者是轴,举一个简单的例子,创建两个figure:
fig1=plt.figure()
fig2=plt.figure()
# 创建了两个实例,fig1,fig2
# 假如说,我们要在fig2里面画上多幅子图
ax=fig2.add_subplot(2,3,5)
# 就是画上两行三列五个实例,如果说数字都小于10的话,可以直接把逗号给去掉,
# 但我不建议,因为我经常出错
# 好,重写图二的代码:
fig3=plt.figure()
ax=fig3.add_subplot(1,1,1)
ax.plot(x,y)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title("A Simple Image")
fig3.show()
fig3.savefig("food.jpg")
这有个问题,就是,他弹窗之后,就立即消失了,但是,可以打开保存的图片food去看:
![](https://img-blog.csdnimg.cn/img_convert/0be1a2b4ba3f40202b048a007075949b.png)
图三:已经保存的图片
好了,这下,一些基础的就讲完了,这下就是调优了,因为你不可能就把这么一幅图给贴在论文里面,你得调色,调背景颜色这一系列的,首先,先来看曲线的样式和颜色:
字符 | 颜色 | 字符 | 颜色 |
b | 蓝色(默认) | m | 紫红色 |
g | 绿色 | y | 黄色 |
r | 红色 | k | 黑色 |
c | 青色 | w | 白色 |
然后是线条样式:
字符 | 颜色 | 字符 | 颜色 | 字符 | 颜色 |
- | 实线 | -. | 点划线 | o | o |
-- | 虚线 | : | 点线 | * | * |
然后就是线条的宽的,测量单位是打印机的点(浮点值),linewidth=,或者你就直接写个lw=:
![](https://img-blog.csdnimg.cn/img_convert/85d0aaae22c0adec229204062495961f.png)
图四:o形
其实,上面的o和*,这俩是用的比较多的,所以我才把他们写到线条样式去了,实际上,他们是标记样式,而且,标记样式有很多:
标记 | 形状 | 标记 | 形状 |
. | 点(默认) | ^ | 上三角 |
o | 圆圈 | < | 左三角 |
* | 星号 | > | 右三角 |
+ | 加号 | n | 正方形 |
x | 字符x | p | 五边形 |
v | 下三角 | h | 六边形 |
这些就是你用来做标记,做对比的时候,会用的多一些,然后,你可以直接“color*”这种方式来绘制,也可以用markeredgecolor来设置颜色,markedgewidth来设置宽度
行了,今天结束的话,就用书上的傅里叶级数部分和来结束:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(-np.pi,np.pi,101)
f=np.ones_like(x)
f[x<0]=-1
y1=(4/np.pi)*(np.sin(x)+np.sin(3*x)/3.0)
y2=y1+(4/np.pi)*(np.sin(5*x)/5.0+np.sin(7*x)/7.0)
y3=y2+(4/np.pi)*(np.sin(9*x)/9.0+np.sin(11*x)/11.0)
plt.ion()
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.plot(x,f,'b-',lw=2,label="f(x)")
ax.plot(x,y1,'c--',lw=2,label="two terms")
ax.plot(x,y2,'r-.',lw=2,label="four terms")
ax.plot(x,y3,'b:',lw=2,label="six terms")
ax.legend(loc="best")
ax.set_xlabel("x",style="italic")
ax.set_ylabel("y",style="italic")
ax.set_title("Fourier",size=16,weight="bold")
fig.savefig("fourier.jpg")
![](https://img-blog.csdnimg.cn/img_convert/622309be7296ea9c4c8d854e77076e1b.png)
图五:傅里叶级数部分和
好了,今天就到这里吧,每天再学习极坐标绘图