Python matplotlib作图实例,画一张想要的图片

系列文章目录

可视化是科学数据的呈现比较理想的一种方式,怎样画一张自己想要的图片很重要。


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Python 中 matplotlib提供了一种绘图方式,本文主要介绍基于Matplotlib绘制单图和画组合图的实例,便于大家快速使用,达到自己想要绘图的目的。要想真正用好,还是需要细致的查看接口参数,学习各种丰富的参数配置。


import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

y_a = [1.1, 2.1, 2.8, 3.5, 5.4, 6.1, 7, 7.5, 9, 10]  # 原始数据
y_a_fit = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 拟合数据
y_b = [0.99, 0.96, 0.91, 0.84, 0.75, 0.64, 0.51, 0.36, 0.19, 0.1]  # 第二组数据

一、单张折线图

主要功能:

大小、背景色、网格、图例、坐标、标题、中文字、标题、增加横竖线、保存图片

import matplotlib.pyplot as plt
from matplotlib import font_manager  # 导入字体管理模块

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y_a = [1.1, 2.1, 2.8, 3.5, 5.4, 6.1, 7, 7.5, 9, 10]  # 原始数据
y_a_error = [0.1, 0.11, 0.13, 0.2, 0.15, 0.22, 0.3, 0.23, 0.32, 0.38]
y_a_fit = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 拟合数据
y_b = [0.99, 0.96, 0.91, 0.84, 0.75, 0.64, 0.51, 0.36, 0.19, 0.1]  # 第二组数据

# 图片大小为10*8,每英寸100个像素点
plt.figure(figsize=(10, 8), dpi=100)  # 设置图片大小,一般默认不设置
plt.rcParams['axes.facecolor'] = 'y' # 设置背景色
plt.grid(True)  # 绘制网格

plt.title('标题', fontsize=15, fontproperties='FangSong') # 解决中文标注字体,否则显示失败
plt.plot(x, y_a, color='r', marker='o', linestyle='', label='y_a')
# plt.errorbar(x,y_a,fmt="bo:", yerr=y_a_error,xerr=0.1,ecolor='r',capsize=5)  #误差棒
plt.plot(x, y_a_fit, label='y_a_fit', linestyle='dashed', alpha=0.5)  # 虚线连接

plt.ylim(ymin=0, ymax=12)  # 设置X取值范围
plt.xlim(xmin=0, xmax=11)  # 设置X取值范围
# 等价于plt.plt.axis([0, 11, 0, 12]) x,y一起设计

plt.xlabel('x坐标', fontsize=14, fontproperties='FangSong')
plt.ylabel('y坐标', fontsize=14, fontproperties='FangSong')
plt.axvline(x=7, color='#d46061', linewidth=1) # 增加横线
plt.axhline(y=6, color='#d46061', linewidth=1)
# 注释标注特殊点
# xy:箭头所在位置,xytext:文本所在位置,
# arrowprops 在xy和xytext之间绘制箭头, shrink表示注释点与注释文本之间的距离
plt.annotate('注释', xy=(2, 2), xytext=(2, 5),
             arrowprops=dict(facecolor='c', shrink=0.1),
             fontproperties='FangSong')

plt.legend()  # 显示图例等信息
plt.savefig("fig_1.png") # 放在show前面
plt.show()

在这里插入图片描述

二、组合图

主要功能:

多图组合,多坐标轴,局部放大

偶数张图

fg = plt.figure()
sub1 = plt.subplot(321, facecolor='r')  # 32列第一个位置
sub1.plot(x, y_a, color='g', marker='o', linestyle='', label='y_a')
plt.subplot(322, facecolor='g')
plt.subplot(323, facecolor='b')
sub4 = plt.subplot(324, facecolor='c')
sub4.errorbar(x,y_a,fmt="bo:", yerr=y_a_error,xerr=0.1,ecolor='r',capsize=5)
sub4.set_xlabel('x坐标', fontsize=14, fontproperties='FangSong')
#误差棒
plt.subplot(325, facecolor='y')
plt.subplot(326, facecolor='k')
# plt.legend()
plt.show()

偶数张图像布局

奇数数张图

fg = plt.figure()
sub1 = plt.subplot(211, facecolor='r')  # 22列第一个位置
sub1.plot(x, y_a, color='g', marker='o', linestyle='', label='y_a')
plt.subplot(223, facecolor='g')
sub3 = plt.subplot(224, facecolor='b')
sub3.errorbar(x,y_a,fmt="bo:", yerr=y_a_error,xerr=0.1,ecolor='r',capsize=5)
sub3.set_xlabel('x坐标', fontsize=14, fontproperties='FangSong')
#误差棒
# plt.legend()
plt.show()

fg = plt.figure()
sub1 = plt.subplot(221, facecolor='r')  # 22列第一个位置
sub1.plot(x, y_a, color='g', marker='o', linestyle='', label='y_a')
plt.subplot(222, facecolor='g')
sub3 = plt.subplot(212, facecolor='b')
sub3.errorbar(x,y_a,fmt="bo:", yerr=y_a_error,xerr=0.1,ecolor='r',capsize=5)
sub3.set_xlabel('x坐标', fontsize=14, fontproperties='FangSong')
#误差棒
# plt.legend()
plt.show()

fg = plt.figure()
sub1 = plt.subplot(121, facecolor='r')  # 22列第一个位置
sub1.plot(x, y_a, color='g', marker='o', linestyle='', label='y_a')
plt.subplot(222, facecolor='g')
sub3 = plt.subplot(224, facecolor='b')
sub3.errorbar(x,y_a,fmt="bo:", yerr=y_a_error,xerr=0.1,ecolor='r',capsize=5)
sub3.set_xlabel('x坐标', fontsize=14, fontproperties='FangSong')
#误差棒
# plt.legend()
plt.show()

fg = plt.figure()
sub1 = plt.subplot(122, facecolor='r')  # 22列第一个位置
sub1.plot(x, y_a, color='g', marker='o', linestyle='', label='y_a')
plt.subplot(221, facecolor='g')
sub3 = plt.subplot(223, facecolor='b')
sub3.errorbar(x,y_a,fmt="bo:", yerr=y_a_error,xerr=0.1,ecolor='r',capsize=5)
sub3.set_xlabel('x坐标', fontsize=14, fontproperties='FangSong')
#误差棒
# plt.legend()
plt.show()

四种放置方式
四种奇数张图片布局

三、多坐标轴

fg = plt.figure()
ax1 = fg.add_subplot(111)  # 22列第一个位置
ax1.plot(x, y_a, color='b', marker='o', linestyle='', label='y_a')
ax1.plot(x, y_a_fit, label='y_a_fit')
ax1.set_title("Double Y axis")
ax1.set_xlabel('x坐标', fontsize=14, fontproperties='FangSong')
ax1.set_ylabel('y1坐标', fontsize=14, fontproperties='FangSong')
plt.legend()
ax2 = ax1.twinx()  # 创建新的孪生x 这步骤最重要
ax2.plot(x, y_b, color='y', linestyle='--', label='y_b')
ax2.set_ylabel('y2坐标', fontsize=14, fontproperties='FangSong')
plt.legend(loc="upper right", bbox_to_anchor=(1, 1))

plt.show()

在这里插入图片描述

四、局部放大

from mpl_toolkits.axes_grid1.inset_locator import inset_axes, mark_inset

fig, ax1 = plt.subplots(1, 1, figsize=(6, 4))
ax1.plot(x, y_a, color='b', marker='o', linestyle='', label='y_a')
ax1.plot(x, y_a_fit, label='y_a_fit')
ax1.legend(labels=["y_a", "y_a_fit"], ncol=2)

# 嵌入局部放大图
axins = inset_axes(ax1, width="30%", height="30%", loc='lower left',
                   bbox_to_anchor=(0.1, 0.6, 1, 1),
                   # bbox_to_anchor:边界框,四元数组(x0, y0, width, height),调节放大图位置
                   bbox_transform=ax1.transAxes)
#在子图画一遍,采用放大显示
axins.plot(x, y_a, color='b', marker='o', linestyle='', label='y_a')
axins.plot(x, y_a_fit, label='y_a_fit')
axins.set_xlim(xmin=4.5, xmax=5.5)
axins.set_ylim(ymin=4.5, ymax=5.5)
mark_inset(ax1, axins, loc1=3, loc2=1, fc="none", ec='r', lw=1)
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值