返回介绍

01. Python 工具

02. Python 基础

03. Numpy

04. Scipy

05. Python 进阶

06. Matplotlib

07. 使用其他语言进行扩展

08. 面向对象编程

09. Theano 基础

10. 有趣的第三方模块

11. 有用的工具

12. Pandas

不要迷信默认设置

发布于 2022-09-03 20:46:14 字数 26907 浏览 0 评论 0 收藏 0

导入相关的包:

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() 函数的主要参数如下:

参数默认值描述
num1图号
figsizefigure.figsize图大小(宽,高)(单位英寸)
dpifigure.dpi分辨率(每英寸所打印的点数)
facecolorfigure.facecolor背景颜色
edgecolorfigure.edgecolor边界颜色
frameonTrue是否显示图框架

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 中的 xlimylim 来设置:

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 中的 xticksyticks 函数,将需要的刻度传入:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文