python matplotlib plt 画图总结

文章目录

      • 笔记主页
      • 绘图默认参数设置
      • 1 绘图
        • 1.1 曲线图
          • 绘制双Y轴图
          • 绘制多个子图
        • 1.2 散点图
        • 1.3 箱型图
      • 2 颜色
        • 2.1 默认颜色
        • 2.2 颜色库
        • 2.3 三维图背景改成白色
      • 3 坐标轴和图例
        • 3.1 显示右上刻度线,刻度线朝内
        • 3.2 图例设置
        • 3.3 使用Latex语法
        • 3.4 设置坐标轴范围,设置刻度
      • 4 保存图片
      • 5 常见问题
        • 5.1 无法显示中文
        • 5.2 不显示负号
      • 6 一些代码供查询

笔记主页

文章后续在个人笔记主页更新:画图总结

绘图默认参数设置

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())  # 查看画图时有哪些可以设置的默认参数

1 绘图

1.1 曲线图
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来定义,如下图所示:
python matplotlib plt 画图总结_第1张图片

绘制双Y轴图
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()
1.2 散点图
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:标签

Matplotlib官网关于marker的描述
python matplotlib plt 画图总结_第2张图片

PS:画空心原点,将颜色设置为白色(color='white'),选择合适的描边宽度和颜色即可。

1.3 箱型图
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.5
  • labels: 标签。给定一个标签序列
  • meanline: 布尔值 是否画出平均值线

其他可定义的参数:参考Matplotlib官网:boxplot格式自定义

  • boxpros : 给定一个字典 设置箱体的属性
  • whiskerprops: 给定一个字典 设置两端的属性
  • flierprops: 给定字典 设置奇异值的属性
  • medianprops: 给定字典 设置中间线属性
  • meanprops: 给定字典,设置平均值属性

设置箱体填充颜色:参考Matplotlib官网:boxplot箱体填充

2 颜色

2.1 默认颜色

Matplotlib官网关于默认颜色的描述
python matplotlib plt 画图总结_第3张图片

提取默认颜色序列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']
2.2 颜色库

Seaborn调色板表格整理

2.3 三维图背景改成白色
# 或者一个三维图
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()

3 坐标轴和图例

文章最开始已经列出了一些默认参数设置,这一部分根据需要进行设置即可。

3.1 显示右上刻度线,刻度线朝内
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
3.2 图例设置

包括:图例位置设置、图例去除边框、图例字体大小设置

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()
3.3 使用Latex语法
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

3.4 设置坐标轴范围,设置刻度
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()

4 保存图片

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')

5 常见问题

5.1 无法显示中文
import matplotlib as mpl
mpl.rcParams['font.family'] = 'simsun'  # 设置中文为宋体
5.2 不显示负号
plt.rcParams['axes.unicode_minus'] = False  # 解决无法显示负号

6 一些代码供查询

import matplotlib as mpl
print(mpl.rcParams.keys())  # 看看画图时可以设置哪些默认参数

你可能感兴趣的:(Matplotlib,matplotlib,python)