Matplotlib
程序员文章站
2022-07-14 10:05:27
...
简介
- 是专门用于开发2D图表(包括3D图表)
- 以渐进、交互式方式实现数据可视化
- 直观、方便的呈现
图形绘制流程
- 导包
- 创建画布
- 绘制图像
- 显示调整和保存
-
显示图像
plt.show()
交互模式下,显示所有图形并阻止直到图形关闭
图像结构
单图绘制
创建画布
格式: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 和^ 和< 和>
|
实心 三角形标记、倒三角标记、左三角标记 和 右三角标记 |
s 和p 和h 和* 和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()
显示结果:
显示调整和保存
- 修改横纵坐标刻度
plt.xticks(ticks, [labels], **kwargs)
plt.yticks(应当放置刻度的位置列表,在给定位置放置的显式标签的列表)
例:plt.xticks(range(5), ('赵云', '关羽', '马超', '张飞', '黄忠'))
若刻度过于密集可以设置步长:plt.xticks(x[::5], x_ticks_label[::5])
注意:在传递进去的第一个参数必须是数字列表,不能是字符串,若需要是字符串,则必须将数字刻度传到第一位,进行进行替换操作 - 显示网格
plt.grid(color='颜色字符', linestyle='线型符号', linewidth=线宽, alpha=透明度)
透明度在0~1之间,越接近1,越显 - 添加描述信息
plt.xtable("填写X坐标描述信息")
plt.ytable("填写Y坐标描述信息")
plt.title("标题描述信息", fonesize=字体大小)
- 显示图例说明
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 |
- 图像保存
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()
结果显示:
多图显示
区别于单图显示:
- 创建多组画布:
fig, axes = plt.subplots(nrows=行数, ncols=列数, figsize=(长宽), dpi=像素)
- 将单图命令中的
plt
更换为axes[画布编号]
- 添加坐标和标题描述信息命令:
set_xlabel
和set_ylabel
和set_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()
推荐阅读
-
Windows下为Python安装Matplotlib模块
-
python matplotlib实现双Y轴的实例
-
python matplotlib中的subplot函数使用详解
-
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
-
python调用Matplotlib绘制分布点并且添加标签
-
Python matplotlib库基本二维绘图
-
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
-
使用python 的matplotlib 画轨道实例
-
使用matplotlib可视化点云分割结果
-
Python用pandas和matplotlib分析1949-2016年中国各省市历年GDP数据