说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
Matplotlib 是一个 Python 的 2D 绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
matplotlib.pyplot 是使 Matplotlib 像 MATLAB 一样工作的命令样式函数的集合。 每个pyplot 函数都会对图形进行一些更改,如创建图形、在图形中创建绘图区域、在绘图区域中绘制一些线条,用标签装饰绘图等。
pyplot 主要用于交互式绘图和程序化绘图生成的简单案例。
安装:
# 安装,pandas 会自动安装
pip install matplotlib -U
以下是一个简单的折线图示例:
# 约定简写为 plt
import matplotlib.pyplot as plt
x = ['a', 'b', 'c', 'd']
y = [1, 2, 3, 4]
plt.plot(x, y) # 配置 x 轴和 y 轴数据序列
plt.xlabel('x') # 轴标签名
plt.ylabel('y')
plt.title('我的折线图') # 图形标题
plt.show() # 显示图形
我们看到 pyplot API 不如面向对象的 API 灵活,此处看到的大多数函数调用也可以称为 Axes 对象中的方法。
在绘制图形时,图形中的文由于matplotlib未加载中文字体页显示乱码,需要对计算机做以下配置彻底解决这个问题:
下载字体文件:https://www.fontpalace.com/font-download/simhei/ 。下载后打开文件点击安装,Windows也可复制到系统的fonts文件夹。
查找 matplotlib 配置文件,执行以下代码可返回文件目录
# 查找 matplotlib 配置文件
import matplotlib
matplotlib.matplotlib_fname()
进入这个目录,可以看fonts文件夹和matplotlibrc配置文件,fonts文件夹用于存放字体文件。
修改配置文件,用纯文本编辑器打开matplotlibrc配置文件,修改前请备份一下。使用查找(如快捷键 ctr+F )功能查到并操作:
最终这几行的结果为:
font.family : sans-serif
font.sans-serif : SimHei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
axes.unicode_minus : False
找到缓存文件目录并删除,Mac电脑和转到/Users/hui/.matplotlib(其中hui是你自己的电脑用户名),Windows电脑的路径为C:\Users\hui.matplotlib,将tex.cache和fontList.json等文件全删除。
重启 Jupyter 并重新执行代码
如果仍然有问题,可再增加临时代码,可能重新构建一下:
from matplotlib.font_manager import _rebuild
# 重新加载
_rebuild()
如还没解决,可重启电脑试试。
在 Matplotlib 中,figure 是 axes 的父容器,而 axes 是 figure 的内部元素,而我们常用的各种图表、图例、坐标轴等则又是 axes 的内部元素。
一般,我们会使用变量名 fig 来指代图形对象,以及变量名 ax 来指代维度变量,创建了维度,可以使用 ax.plot 方法将数据绘制在图表上。
创建这这元素的方法:
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes()
x = np.linspace(0, 10, 500)
# ax.plot(x, np.sin(x)) 同下,也可创建图形
plt.plot(x, np.sin(x))
# 创建两条线
plt.plot(x, np.sin(x))
plt.plot(x, np.cos(x))
# plt.show() 可省略
元素{.center}
元素的细节设置如下。
可对全局的样式进行配置:
plt.style.use('seaborn-whitegrid')
# 查看可用样式
plt.style.available
以下几种赋值方式:
plt.plot(x, np.sin(x - 0), color='blue') # 颜色名称指定
plt.plot(x, np.sin(x - 1), color='g') # 颜色简写名称指定(rgbcmyk)
plt.plot(x, np.sin(x - 2), color='0.75') # 介于0-1之间的灰阶值
plt.plot(x, np.sin(x - 3), color='#FFDD44') # 16进制的RRGGBB值
plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3)) # RGB元组的颜色值,介于0-1
plt.plot(x, np.sin(x - 5), color='chartreuse'); # 能支持所有HTML颜色名称值
17 种标准色颜色名为: aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, orange, purple, red, silver, teal, white, yellow。 网页常用颜色及颜色代码。
# 对应下方
plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 2, linestyle='dashdot')
plt.plot(x, x + 3, linestyle='dotted');
# 还可以用形象的符号代表线条风格
plt.plot(x, x + 4, linestyle='-') # 实线
plt.plot(x, x + 5, linestyle='--') # 虚线
plt.plot(x, x + 6, linestyle='-.') # 长短点虚线
plt.plot(x, x + 7, linestyle=':'); # 点线
linestyle 和 color 参数能够合并成一个非关键字参数:
plt.plot(x, x + 0, '-g') # 绿色实线
plt.plot(x, x + 1, '--c') # 天青色虚线
plt.plot(x, x + 2, '-.k') # 黑色长短点虚线
plt.plot(x, x + 3, ':r'); # 红色点线
plt.plot(x, x + 4, 'or') # 红色大圆点
# 其他 ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']
如果对自动匹配的坐标轴范围不满意,可以自己进行相关调整。
plt.plot(x, -np.sin(x))
plt.xlim(-1, 5)
plt.ylim(-2.5, 2.5);
# axis 也可以,传入 [xmin, xmax, ymin, ymax]
plt.plot(x, -np.sin(x))
plt.axis([-1, 5, -2.5, 2.5]);
# 设置x轴与y轴组成正方形,可参考文档关于字符串说明
plt.plot(x, np.sin(x))
plt.axis('square')
# x 轴从 y 轴 0 开始
# 绘制点之外的边界设置为零
plt.margins(x=0)
可设置轴上的标签文本:
plt.plot(x, np.sin(x))
plt.title("A Sine Curve") # 标题
plt.xlabel("x") # x 轴标签
plt.ylabel("sin(x)") # y 轴标签
标签的位置、大小和风格可以通过上面函数的可选参数进行设置:
plt.plot(x, np.sin(x))
plt.plot(x, np.sin(x))
plt.xlabel("x side",
color='r', # 颜色
fontsize=20, # 字号
labelpad=-1, # 与轴的上下距离
loc='right' # 位置居右
)
plt.figure(figsize=(10,5)) # 图形和大小
plt.xticks(rotation=45) # x 轴上标签的角度
# 设置时间标签显示格式
import matplotlib.dates as mdate
ax.xaxis.set_major_formatter(mdate.DateFormatter('%Y-%m-%d'))
# 指定坐标上标注一个红框的 note 字符
plt.text(5, 5, 'note', bbox=dict(facecolor='red', alpha=0.5))
plt.plot(x, np.sin(x), '-g', label='sin(x)')
plt.plot(x, np.cos(x), ':b', label='cos(x)')
plt.legend() # 图例
# 其他参数
plt.legend(['sin(x) line', 'cos(x) line']) # 指定文案
ax = plt.axes()
ax.plot(x, np.sin(x))
ax.set(xlim=(0, 10), ylim=(-2, 2),
xlabel='x', ylabel='sin(x)',
title='A Simple Plot');
简单使用:
fig = plt.figure()
x = np.linspace(1, 101, 100, dtype='int')
y = np.random.normal(10, 20, size=100)
plt.scatter(x, y)
更多参数:
rng = np.random.RandomState(123)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x, y,
c=colors, # 标记颜色
s=sizes, # 点标记大小
alpha=0.3, # 透明度
cmap='viridis' # 色系
)
plt.xlabel('x')
plt.ylabel('y')
plt.colorbar(); # 显示颜色对比条
todo
更新时间:2023-05-25 18:27:01 标签:python matplotlib 可视化