文章后续在个人笔记主页更新:画图总结
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['text.usetex'] = True # 使用Latex语法
mpl.rcParams['font.family'] = 'simsun' # 解决中文问题
mpl.rcParams['axes.unicode_minus'] = False # 解决无法显示负号
mpl.rcParams['xtick.direction'] = 'in' # x轴刻度线朝内
mpl.rcParams['ytick.direction'] = 'in' # y轴刻度线朝内
mpl.rcParams['xtick.top'] = True # 显示上方的坐标轴
mpl.rcParams['ytick.right'] = True # 显示右侧的坐标轴
mpl.rcParams['legend.frameon'] = False # legend不显示边框
mpl.rcParams['legend.fontsize'] = 12 # legend默认size
mpl.rcParams['xtick.labelsize'] = 12 # x坐标默认size
mpl.rcParams['ytick.labelsize'] = 12 # y坐标默认size
mpl.rcParams['axes.labelsize'] = 12 # 轴标题默认size
# print(mpl.rcParams.keys()) # 查看画图时有哪些可以设置的默认参数
import matplotlib.pyplot as plt
import matplotlib as mpl
# 一个二维图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(xlist, ylist)
# 或者一个三维图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(xlist, ylist, zlist)
plt.show()
常用参数:
color
:颜色linewidth
:线宽linestyle
:线型label
:标签marker
:曲线上的标记类型markersize
:曲线上的标记大小Matplotlib官网关于线型的描述
线型除了’solid’, 'dotted’等,还可以用tuple来定义,如下图所示:
import matplotlib.pyplot as plt
import matplotlib as mpl
xlist = [1, 2, 3, 4, 5]
y1_list = [2, 4, 6, 8, 10]
y2_list = [1, 3, 5, 7, 9]
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(xlist, y1_list, label='Y1') # 绘制第一个轴的
ax.set_xlabel('$x(m)$') # 设置X轴
ax.set_ylabel('$Y1(m/s^2)$') # 设置Y1轴
ax_new = ax.twinx()
ax_new.plot(xlist, y2_list, label='Y2') # 绘制第二个轴的
ax_new.set_ylabel('$Y2(m^2)$') # 设置Y2轴
plt.show()
参考知乎文章和CSDN文章
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10)
fig1 = plt.figure(1)
ax1 = plt.axes([0.1, 0.1, 0.8, 0.4])
# 四个值分别是: [子图左下角的x 子图左下角的y, 子图宽度, 子图高度] 四个值都是相对全图来取值的,范围为0-1
ax1.plot(np.sin(x), label='sinx')
ax1.legend()
ax2 = plt.axes([0.1, 0.5, 0.8, 0.4])
ax2.plot(np.cos(x), label='cosx')
ax2.legend()
plt.show()
import matplotlib.pyplot as plt
import matplotlib as mpl
fig = plt.figure()
# 一个二维图
ax = fig.add_subplot(111)
ax.scatter(xlist, ylist)
# 或者一个三维图
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xlist, ylist, zlist)
plt.show()
常用参数:
color
:颜色marker
:散点类型s
:散点尺寸linewidth
:散点描边宽度edgecolor
:散点描边颜色label
:标签PS:画空心原点,将颜色设置为白色(
color='white'
),选择合适的描边宽度和颜色即可。
import matplotlib.pyplot as plt
import matplotlib as mpl
fig1 = plt.figure(1)
ax1 = plt.axes()
ax1.boxplot(your_array) # 输入一个二维数组,对每列数据画箱型图
plt.show()
常用参数: 参考Matplotlib官网:boxplot
sym
: 奇异值标记设置,例如'r+'
为红色+号vert
:画垂直箱体图。True
垂直箱体图 or False
水平箱体图whis
: 奇异值门槛。默认1.5,取值越大箱体包纳的数据越多。widths
: 箱体宽度。默认0.5labels
: 标签。给定一个标签序列meanline
: 布尔值 是否画出平均值线其他可定义的参数:参考Matplotlib官网:boxplot格式自定义
boxpros
: 给定一个字典 设置箱体的属性whiskerprops
: 给定一个字典 设置两端的属性flierprops
: 给定字典 设置奇异值的属性medianprops
: 给定字典 设置中间线属性meanprops
: 给定字典,设置平均值属性设置箱体填充颜色:参考Matplotlib官网:boxplot箱体填充
提取默认颜色序列colors
(画图引用时传入color=colors[i]
即可)
import matplotlib.pyplot as plt
import matplotlib as mpl
prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']
Seaborn
调色板表格整理
# 或者一个三维图
import matplotlib.pyplot as plt
import matplotlib as mpl
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot(xlist, ylist, zlist)
ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 1.0))
ax.grid(False) # 去掉网格
plt.show()
文章最开始已经列出了一些默认参数设置,这一部分根据需要进行设置即可。
mpl.rcParams['xtick.direction'] = 'in' # x轴刻度线朝内
mpl.rcParams['ytick.direction'] = 'in' # y轴刻度线朝内
mpl.rcParams['xtick.top'] = True # 显示上方的坐标轴
mpl.rcParams['ytick.right'] = True # 显示右侧的坐标轴
mpl.rcParams['xtick.direction'] = 'in' # x刻度线朝内
mpl.rcParams['ytick.direction'] = 'in' # y刻度线朝内
mpl.rcParams['xtick.labelsize'] = 12 # x坐标默认size
mpl.rcParams['ytick.labelsize'] = 12 # y坐标默认size
包括:图例位置设置、图例去除边框、图例字体大小设置
import matplotlib.pyplot as plt
import matplotlib as mpl
# 一个二维图
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(xlist, ylist)
mpl.rcParams['legend.frameon'] = False # 图例不显示边框
mpl.rcParams['legend.fontsize'] = 12 # 图例默认size为12
# 图例位置
ax.legend(loc='upper left')
# 图例位置的参数有:
# 'upper left', 'upper right', 'lower left', 'lower right'
# 'upper center', 'lower center', 'center left', 'center right'
# 'center', 'best'
plt.show()
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['text.usetex'] = True # 使用latex
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(xlist, ylist)
ax.set_xlabel('$x(m)$') # Latex语法在美元符号$$中间输入
ax.set_ylabel('$y(m/s^2)$')
plt.show()
PS: 开启
text.usetex
时不能有中文,所以需要使用中文前设置为False
,使用中文后再设置为True
fig1 = plt.figure(1)
ax1 = plt.axes()
ax1.plot(np.linspace(-100, 100, 100), np.linspace(-20, 20, 100))
ax1.set_xlim([77, 85]) # 设置X轴范围为77到85
ax1.set_ylim([-15, 5]) # 设置Y轴范围为-15到5
ax1.set_xticks(np.arange(78, 86, 2)) # 设置X轴刻度为78到86,间隔为2。(可以自己给一个列表)
ax1.set_yticks([-10, -5, 0]) # 设置Y轴刻度为[-10, -5, 0]
plt.show()
xlist = [1, 2, 3, 4, 5]
ylist = [2, 4, 6, 8, 10]
fig = plt.figure(1)
ax = fig.add_subplot(111)
ax.plot(xlist, ylist)
# bbox_inches='tight' 保存图片时保持紧凑(去除图片多余的空白)
# pad_inches 表示图片周围留空白的尺寸(单位为inch)(在坐标轴显示不全时可以设置一下留白)
fig.savefig('filename', dpi=600, bbox_inches='tight', pad_inches=0)
图片转灰度
from PIL import Image
im = Image.open('image/q_ij.png')
im = im.convert('L')
im.save('image/q_ij.png')
import matplotlib as mpl
mpl.rcParams['font.family'] = 'simsun' # 设置中文为宋体
plt.rcParams['axes.unicode_minus'] = False # 解决无法显示负号
import matplotlib as mpl
print(mpl.rcParams.keys()) # 看看画图时可以设置哪些默认参数