01. Python 工具
02. Python 基础
03. Numpy
- Numpy 简介
- Matplotlib 基础
- Numpy 数组及其索引
- 数组类型
- 数组方法
- 数组排序
- 数组形状
- 对角线
- 数组与字符串的转换
- 数组属性方法总结
- 生成数组的函数
- 矩阵
- 一般函数
- 向量化函数
- 二元运算
- ufunc 对象
- choose 函数实现条件筛选
- 数组广播机制
- 数组读写
- 结构化数组
- 记录数组
- 内存映射
- 从 Matlab 到 Numpy
04. Scipy
05. Python 进阶
- sys 模块简介
- 与操作系统进行交互:os 模块
- CSV 文件和 csv 模块
- 正则表达式和 re 模块
- datetime 模块
- SQL 数据库
- 对象关系映射
- 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归
- 迭代器
- 生成器
- with 语句和上下文管理器
- 修饰符
- 修饰符的使用
- operator, functools, itertools, toolz, fn, funcy 模块
- 作用域
- 动态编译
06. Matplotlib
- Pyplot 教程
- 使用 style 来配置 pyplot 风格
- 处理文本(基础)
- 处理文本(数学表达式)
- 图像基础
- 注释
- 标签
- figures, subplots, axes 和 ticks 对象
- 不要迷信默认设置
- 各种绘图实例
07. 使用其他语言进行扩展
- 简介
- Python 扩展模块
- Cython:Cython 基础,将源代码转换成扩展模块
- Cython:Cython 语法,调用其他C库
- Cython:class 和 cdef class,使用 C++
- Cython:Typed memoryviews
- 生成编译注释
- ctypes
08. 面向对象编程
09. Theano 基础
- Theano 简介及其安装
- Theano 基础
- Theano 在 Windows 上的配置
- Theano 符号图结构
- Theano 配置和编译模式
- Theano 条件语句
- Theano 循环:scan(详解)
- Theano 实例:线性回归
- Theano 实例:Logistic 回归
- Theano 实例:Softmax 回归
- Theano 实例:人工神经网络
- Theano 随机数流变量
- Theano 实例:更复杂的网络
- Theano 实例:卷积神经网络
- Theano tensor 模块:基础
- Theano tensor 模块:索引
- Theano tensor 模块:操作符和逐元素操作
- Theano tensor 模块:nnet 子模块
- Theano tensor 模块:conv 子模块
10. 有趣的第三方模块
11. 有用的工具
- pprint 模块:打印 Python 对象
- pickle, cPickle 模块:序列化 Python 对象
- json 模块:处理 JSON 数据
- glob 模块:文件模式匹配
- shutil 模块:高级文件操作
- gzip, zipfile, tarfile 模块:处理压缩文件
- logging 模块:记录日志
- string 模块:字符串处理
- collections 模块:更多数据结构
- requests 模块:HTTP for Human
12. Pandas
不要迷信默认设置
导入相关的包:
In [1]:
import numpy as np
import matplotlib.pyplot as plt
生成三角函数:
In [2]:
x = np.linspace(-np.pi, np.pi)
c, s = np.cos(x), np.sin(x)
默认绘图
In [3]:
%matplotlib inline
# 画图
p = plt.plot(x,c)
p = plt.plot(x,s)
# 在脚本中需要加上这句才会显示图像
plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/EWds4Dp5VbEkwRB7-zxQ1an.png alt="">
默认效果如图所示,我们可以修改默认的属性来得到更漂亮的结果。
图
图像以 Figure #
为窗口标题,并且数字从 1 开始,figure()
函数的主要参数如下:
参数 | 默认值 | 描述 |
---|---|---|
num | 1 | 图号 |
figsize | figure.figsize | 图大小(宽,高)(单位英寸) |
dpi | figure.dpi | 分辨率(每英寸所打印的点数) |
facecolor | figure.facecolor | 背景颜色 |
edgecolor | figure.edgecolor | 边界颜色 |
frameon | True | 是否显示图框架 |
In [ ]:
# 设置图像大小
f = plt.figure(figsize=(10,6), dpi=80)
# 画图
p = plt.plot(x,c)
p = plt.plot(x,s)
# 在脚本中需要加上这句才会显示图像
plt.show()
设置线条颜色,粗细,类型
首先,我们使用 figure() 函数来创建一幅新图像,并且指定它的大小,使得长宽比更合适。
然后,我们使用 color, linewidth, linestyle
参数,指定曲线的颜色,粗细,类型:
In [4]:
# 设置图像大小
f = plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
p = plt.plot(x, c, color="blue", linewidth=2.5, linestyle="-")
p = plt.plot(x, s, color="red", linewidth=2.5, linestyle="-")
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/HZf2fqVVSQwD3rUY-gy6vrZ.png alt="">
也可以像 Matlab 中一样使用格式字符来修改参数:
表示颜色的字符参数有:
字符 | 颜色 |
---|---|
‘b’ | 蓝色,blue |
‘g’ | 绿色,green |
‘r’ | 红色,red |
‘c’ | 青色,cyan |
‘m’ | 品红,magenta |
‘y’ | 黄色,yellow |
‘k’ | 黑色,black |
‘w’ | 白色,white |
表示类型的字符参数有:
字符 | 类型 | 字符 | 类型 |
---|---|---|---|
'-' | 实线 | '--' | 虚线 |
'-.' | 虚点线 | ':' | 点线 |
'.' | 点 | ',' | 像素点 |
'o' | 圆点 | 'v' | 下三角点 |
'^' | 上三角点 | '<' | 左三角点 |
'>' | 右三角点 | '1' | 下三叉点 |
'2' | 上三叉点 | '3' | 左三叉点 |
'4' | 右三叉点 | 's' | 正方点 |
'p' | 五角点 | '*' | 星形点 |
'h' | 六边形点1 | 'H' | 六边形点2 |
'+' | 加号点 | 'x' | 乘号点 |
'D' | 实心菱形点 | 'd' | 瘦菱形点 |
'_' | 横线点 |
In [5]:
# 设置图像大小
f = plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
p = plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/HZf2fqVVSQwD3rUY-gy6vrZ.png alt="">
设置横轴纵轴的显示区域
我们希望将坐标轴的显示区域放大一些,这样可以看到所有的点,可以使用 plt
中的 xlim
和 ylim
来设置:
In [6]:
# 设置图像大小
p = plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
p = plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
########################################################################
# 设置显示范围
p = plt.xlim(x.min() * 1.1, x.max() * 1.1)
p = plt.ylim(c.min() * 1.1, c.max() * 1.1)
########################################################################
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/1m1ZmJtcovmkY8Fg-xux4FK.png alt="">
设置刻度
对于三教函数来说,我们希望将 x
轴的刻度设为与 $\pi$ 有关的点,可以使用 plt
中的 xticks
和 yticks
函数,将需要的刻度传入:
In [7]:
# 设置图像大小
f = plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
p = plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
# 设置显示范围
plt.xlim(x.min() * 1.1, x.max() * 1.1)
plt.ylim(c.min() * 1.1, c.max() * 1.1)
###########################################################################
# 设置刻度
p = plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
p = plt.yticks([-1, 0, 1])
###########################################################################
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/cDkBZBgl3r3uo7gQ-zJ6VDM.png alt="">
设定 x 轴 y 轴标题
我们想让刻度的位置显示的是含有 $\pi$ 的标识而不是浮点数,可以在 xticks
中传入第二组参数,这组参数代表对应刻度的显示标识。这里,我们使用 latex
的语法来显示特殊符号(使用 $$
包围的部分):
In [8]:
# 设置图像大小
f = plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
p = plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
# 设置显示范围
plt.xlim(x.min() * 1.1, x.max() * 1.1)
plt.ylim(c.min() * 1.1, c.max() * 1.1)
# 设置刻度及其标识
p = plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
['$-\pi$', '$-\pi/2$', '$0$', '$\pi/2$', '$\pi$'], fontsize ='xx-large')
p = plt.yticks([-1, 0, 1],
['$-1$', '$0$', '$+1$'], fontsize ='xx-large')
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/LoLz0dgHhlHYWST6-JP5kRF.png alt="">
移动坐标轴的位置
现在坐标轴的位置是在边界上,而且有上下左右四条,我们现在想将下面和左边的两条移动到中间,并将右边和上面的两条去掉:
In [9]:
# 设置图像大小
f = plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
# 设置显示范围
plt.xlim(x.min() * 1.1, x.max() * 1.1)
plt.ylim(c.min() * 1.1, c.max() * 1.1)
# 得到轴的句柄
ax = plt.gca()
# ax.spines参数表示四个坐标轴线
# 将右边和上边的颜色设为透明
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
###################################################################################
# 将 x 轴的刻度设置在下面的坐标轴上
ax.xaxis.set_ticks_position('bottom')
# 设置位置
ax.spines['bottom'].set_position(('data',0))
# 将 y 轴的刻度设置在左边的坐标轴上
ax.yaxis.set_ticks_position('left')
# 设置位置
ax.spines['left'].set_position(('data',0))
###################################################################################
# 设置刻度及其标识
p = plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
['$-\pi$', '$-\pi/2$', '$0$', '$\pi/2$', '$\pi$'], fontsize ='xx-large')
p = plt.yticks([-1, 0, 1],
['$-1$', '$0$', '$+1$'], fontsize ='xx-large')
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/LwpencY7jr9JEwdi-I77Xnl.png alt="">
加入图例
使用 legend() 加入图例:
In [10]:
# 设置图像大小
plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
# 设置显示范围
plt.xlim(x.min() * 1.1, x.max() * 1.1)
plt.ylim(c.min() * 1.1, c.max() * 1.1)
# 得到画图的句柄
ax = plt.gca()
# ax.spines参数表示四个坐标轴线
# 将右边和上边的颜色设为透明
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 将 x 轴的刻度设置在下面的坐标轴上
ax.xaxis.set_ticks_position('bottom')
# 设置位置
ax.spines['bottom'].set_position(('data',0))
# 将 y 轴的刻度设置在左边的坐标轴上
ax.yaxis.set_ticks_position('left')
# 设置位置
ax.spines['left'].set_position(('data',0))
# 设置刻度及其标识
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
['$-\pi$', '$-\pi/2$', '$0$', '$\pi/2$', '$\pi$'], fontsize ='xx-large')
plt.yticks([-1, 0, 1],
['$-1$', '$0$', '$+1$'], fontsize ='xx-large')
##################################################################################################
# 加入图例,frameon表示去掉图例周围的边框
l = plt.legend(['cosine', 'sine'], loc='upper left', frameon=False)
##################################################################################################
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/bQdLM2E3BkNRKPvs-vkg1ak.png alt="">
注释特殊点
我们可以使用 anotate
函数来注释特殊的点,假设我们要显示的点是 $2\pi/3$:
In [11]:
# 设置图像大小
plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
# 设置显示范围
plt.xlim(x.min() * 1.1, x.max() * 1.1)
plt.ylim(c.min() * 1.1, c.max() * 1.1)
# 得到画图的句柄
ax = plt.gca()
# ax.spines参数表示四个坐标轴线
# 将右边和上边的颜色设为透明
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 将 x 轴的刻度设置在下面的坐标轴上
ax.xaxis.set_ticks_position('bottom')
# 设置位置
ax.spines['bottom'].set_position(('data',0))
# 将 y 轴的刻度设置在左边的坐标轴上
ax.yaxis.set_ticks_position('left')
# 设置位置
ax.spines['left'].set_position(('data',0))
# 设置刻度及其标识
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
['$-\pi$', '$-\pi/2$', '$0$', '$\pi/2$', '$\pi$'], fontsize ='xx-large')
plt.yticks([-1, 0, 1],
['$-1$', '$0$', '$+1$'], fontsize ='xx-large')
# 加入图例,frameon表示图例周围是否需要边框
l = plt.legend(['cosine', 'sine'], loc='upper left', frameon=False)
####################################################################################
# 数据点
t = 2 * np.pi / 3
# 蓝色虚线
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
# 该点处的 cos 值
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
# 在对应的点显示文本
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', # 文本
xy=(t, np.sin(t)), # 数据点坐标位置
xycoords='data', # 坐标相对于数据
xytext=(+10, +30), # 文本位置坐标
textcoords='offset points', # 坐标相对于数据点的坐标
fontsize=16, # 文本大小
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) # 箭头
# 红色虚线
p = plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
# 该点处的 sin 值
p = plt.scatter([t,],[np.sin(t),], 50, color ='red')
# 显示文本
p = plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(-90, -50), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
#####################################################################################
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/sKQXSB0kejrtKpGn-sCxFtz.png alt="">
最后调整
调整刻度值的大小,并让其显示在曲线上方。
In [12]:
# 设置图像大小
plt.figure(figsize=(10,6), dpi=80)
# 画图,指定颜色,线宽,类型
plt.plot(x, c, 'b-',
x, s, 'r-', linewidth=2.5)
# 设置显示范围
plt.xlim(x.min() * 1.1, x.max() * 1.1)
plt.ylim(c.min() * 1.1, c.max() * 1.1)
# 得到画图的句柄
ax = plt.gca()
# ax.spines参数表示四个坐标轴线
# 将右边和上边的颜色设为透明
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 将 x 轴的刻度设置在下面的坐标轴上
ax.xaxis.set_ticks_position('bottom')
# 设置位置
ax.spines['bottom'].set_position(('data',0))
# 将 y 轴的刻度设置在左边的坐标轴上
ax.yaxis.set_ticks_position('left')
# 设置位置
ax.spines['left'].set_position(('data',0))
# 设置刻度及其标识
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
['$-\pi$', '$-\pi/2$', '$0$', '$\pi/2$', '$\pi$'], fontsize ='xx-large')
plt.yticks([-1, 0, 1],
['$-1$', '$0$', '$+1$'], fontsize ='xx-large')
# 加入图例,frameon表示图例周围是否需要边框
l = plt.legend(['cosine', 'sine'], loc='upper left', frameon=False)
# 数据点
t = 2 * np.pi / 3
# 蓝色虚线
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
# 该点处的 cos 值
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
# 在对应的点显示文本
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', # 文本
xy=(t, np.sin(t)), # 数据点坐标位置
xycoords='data', # 坐标相对于数据
xytext=(+10, +30), # 文本位置坐标
textcoords='offset points', # 坐标相对于数据点的坐标
fontsize=16, # 文本大小
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) # 箭头
# 红色虚线
p = plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
# 该点处的 sin 值
p = plt.scatter([t,],[np.sin(t),], 50, color ='red')
# 显示文本
p = plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(-90, -50), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
#####################################################################################
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65 ))
####################################################################################
# 在脚本中需要加上这句才会显示图像
# plt.show()
https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/uN3PblpVCDgolcRT-6HiUuL.png alt="">
The devil is in the details.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论