欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matplotlib

程序员文章站 2022-07-14 10:05:27
...

简介

  • 是专门用于开发2D图表(包括3D图表)
  • 以渐进、交互式方式实现数据可视化
  • 直观、方便的呈现

Matplotlib官方文档

图形绘制流程

  1. 导包
  2. 创建画布
  3. 绘制图像
  4. 显示调整和保存
  5. 显示图像plt.show()交互模式下,显示所有图形并阻止直到图形关闭

图像结构

Matplotlib

单图绘制

创建画布

格式:plt.figure(figsize=(长,宽), dpi=像素,facecolor = 背景颜色, edgecolor=边框颜色)

  • 长宽的单位分别是英寸,默认为[6.4, 4.8]
  • dpi像素值大小为100
  • 背景和边框颜色默认为 白色

绘制图像

方式一: 添加 图例文本说明 参数(多条线不能连写)
plt.图形命令(图形特有参数, marker=“标识字符”,line=“线型符号”, color="颜色字符", label="图例文本说明")

  • 可以为图像添加图例文本(plt.legend(loc=“best”)显示图例
  • 若想要在同一张画布上绘制多条线则必须使用多次该语句
  • 线的样式(颜色、标识、线型)也可以按照方法二中传参

方式二:不添加 图例文本说明 参数
plt.图形命令([x], y, [颜色字符标识字符线型符号], [x2], y2, [颜色字符标识字符线型符号], ...)

  • 该方式可以一次性在一张图上绘制多条线
  • 缺点是无法添加 图像图例文本说明

注意:

  • 方法一中的 color关键字可以简写为c
图形种类 图形命令 优点 图形特有参数及要求
折线图 plt.plot(x,y) 反应数据变化状况 x, y描述折线图的节点,x y必须是 个数相等 的一位数组等长列表
散点图 plt.scatter(x, y) 展示离群点分布规律 x, y描述离散点,x y必须是 个数相等 的一位数组等长列表
柱状图 plt.bar(x,y, width, align='对齐方式') 统计离散数据对比情况 width为柱的宽度,x可为字符串列表,对齐方式:center, edge
直方图 plt.hist(x, bins=None) 统计连续数据分布 x需要传递的数据,bins组距
饼图 plt.pie(x, labels,autopct="%1.2f%%") 显示占比情况 x数量(自动算百分比),labels每部分名称, autopct占比显示
颜色字符和颜色 颜色字符和颜色 颜色字符和颜色 颜色字符和颜色
b蓝色 g绿色 r红色 c青色
m品红 y黄色 k黑色 w白色
标识字符 标明样本点的样式
.|_+x 点标记、单竖线标记、单横线标记、加号标记 和 x标记
v^<> 实心 三角形标记、倒三角标记、左三角标记 和 右三角标记
sph*d 实心 正方形标记、五边形标记、六边形标记 、五角星标记 和 菱形标记
线型符号 线样式
-(一个减号) 实线样式
--(两个减号) 长虚线样式
:(一个冒号) 短虚线样式
-.(一个减号和一个点) 点划线样式
import matplotlib.pyplot as plt
import random

x = range(0, 60)
y1 = [random.uniform(10, 15) for i in x]
y2 = [random.uniform(18, 23) for i in x]

plt.figure(figsize=(10,5), dpi=100)
plt.plot(x, y1,"x-r", y2, '.--g')
plt.show()

显示结果:

Matplotlib

显示调整和保存

  1. 修改横纵坐标刻度
    plt.xticks(ticks, [labels], **kwargs)
    plt.yticks(应当放置刻度的位置列表,在给定位置放置的显式标签的列表)
    例:plt.xticks(range(5), ('赵云', '关羽', '马超', '张飞', '黄忠'))
    若刻度过于密集可以设置步长:plt.xticks(x[::5], x_ticks_label[::5])
    注意:在传递进去的第一个参数必须是数字列表,不能是字符串,若需要是字符串,则必须将数字刻度传到第一位,进行进行替换操作
  2. 显示网格
    plt.grid(color='颜色字符', linestyle='线型符号', linewidth=线宽, alpha=透明度)
    透明度在0~1之间,越接近1,越显
  3. 添加描述信息
    plt.xtable("填写X坐标描述信息")
    plt.ytable("填写Y坐标描述信息")
    plt.title("标题描述信息", fonesize=字体大小)
  4. 显示图例说明
    plt.legend(loc=“Location String”或 Location Code)
Location String 位置 Location Code
best 自动调整 0
upper right 右上角 1
upper left 左上角 2
lower left 左下角 3
lower right 右下角 4
right 右侧 5
center left 左侧居中 6
center right 右侧居中 7
lower center 底部居中 8
upper center 顶部居中 9
center 画布正* 10
  1. 图像保存
    plt.savefig("路径/名称.图片后缀")

注意:显示调整命令和图像保存的命令必须在plt.show()之前设置显示和保存

import matplotlib.pyplot as plt
import random

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(14, 18) for i in x]
y_beijing = [random.uniform(7,11) for i in x]

# 1.创建画布
plt.figure(figsize=(15, 5), dpi=100)

# 2.绘制图像
plt.plot(x, y_shanghai, marker='x', label="上海")
plt.plot(x, y_beijing, 'r--.', label="北京")

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(25)

# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])

# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
plt.xlabel("时间(/ min)", fontsize=14)
plt.ylabel("温度(/ °C)", fontsize=14)
plt.title("中午11点--12点某城市温度变化图", fontsize=20)

# 2.4 图像保存
plt.savefig("./test.png")

# 2.5 添加图例
plt.legend(loc=0)

# 3.图像显示
plt.show()

结果显示:
Matplotlib

多图显示

区别于单图显示:

  • 创建多组画布:fig, axes = plt.subplots(nrows=行数, ncols=列数, figsize=(长宽), dpi=像素)
  • 将单图命令中的plt更换为axes[画布编号]
  • 添加坐标和标题描述信息命令:set_xlabelset_ylabelset_title
  • 注意修改刻度有很大差异,需使用set_xticks()设置刻度跨度,然后使用set_xticklabels()修改刻度显示
  • plt.函数名()相当于面向过程的画图方法,axes.set_方法名()相当于面向对象的画图方法
  • 仅仅是函数函数名发生变化,参数与单图显示完全一致
import matplotlib.pyplot as plt
import random

# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(14, 18) for i in x]
y_beijing = [random.uniform(7,11) for i in x]


# 1.创建画布
# plt.figure(figsize=(15, 5))
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(15, 5))


# 2.绘制图像
# plt.plot(x, y_shanghai, marker='x', label="上海")
# plt.plot(x, y_beijing, 'r--.', label="北京")
axes[0].plot(x, y_shanghai, marker='x', label="上海")
axes[1].plot(x, y_beijing, 'r--.', label="北京")

# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)

# 刻度显示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])

# 2.2 添加网格显示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)

# 2.3 添加描述信息
# plt.xlabel("时间")
# plt.ylabel("温度")
# plt.title("中午11点--12点某城市温度变化图", fontsize=20)
axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")

# # 2.4 图像保存
plt.savefig("./test.png")

# # 2.5 添加图例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)

# 3.图像显示
plt.show()

Matplotlib

相关标签: Matplotlib python