我是靠谱客的博主 明亮黑裤,最近开发中收集的这篇文章主要介绍Python数据可视化:走进matplotlib的世界,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一图胜千言,使用Python的matplotlib库,可以快速创建高质量的图形。

用matplotlib生成基本图形非常简单,只需要几行代码,但要创建复杂的图表,需要调用更多的命令和反复试验,这要求用户对matplotlib有深入的认识。

蜂鸟数据推出一个新的系列教程:Python数据可视化,针对初级和中级用户,将理论和示例代码相结合,分别使用matplotlib, seaborn, plotly等工具实现可视化。首先从matplotlib开始。

本文将介绍matplotlib的绘图基础。

1. matplotlib层次结构

学习matplotlib,首先要掌握一个核心概念:matplotlib的对象层次结构。

如果您曾经使用过matplotlib,则可能调用过类似plt.plot([1,2,3])这样的函数。这种调用隐藏了一个事实,即图表实际上是嵌套的Python对象的层次结构。这里的“层次结构”意味着每个图下面都有matplotlib对象的树状结构。

如下图所示,Figure对象是matplotlib图形最外层的容器,其中包含一个或多个Axes对象。您可以将Figure对象理解为一个盒型容器,封装了数据,几何图形和样式。Axes对象包含较小的对象,例如刻度线(xaxis/yaxis),行坐标/列坐标(xaxis/yaxis),图例(legend)和标题(title)等。所有这些图形元素都是可操作的python对象。

matplotlib structure

2. 样式

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

# 在jupyter notebook展示图表
%matplotlib inline

matplotlib提供了很多内置样式(style),也称为主题(theme),它们可以帮助用户快速创建美观的图形。

# 查看有哪些内置样式
plt.style.available
['Solarize_Light2',
 '_classic_test_patch',
 'bmh',
 'classic',
 'dark_background',
 'fast',
 'fivethirtyeight',
 'ggplot',
 'grayscale',
 'seaborn',
 'seaborn-bright',
 'seaborn-colorblind',
 'seaborn-dark',
 'seaborn-dark-palette',
 'seaborn-darkgrid',
 'seaborn-deep',
 'seaborn-muted',
 'seaborn-notebook',
 'seaborn-paper',
 'seaborn-pastel',
 'seaborn-poster',
 'seaborn-talk',
 'seaborn-ticks',
 'seaborn-white',
 'seaborn-whitegrid',
 'tableau-colorblind10']

在接下来的教程中,我们会尝试不同的主题,首先选择’ggplot’,它会实现R语言ggplot2的效果。

plt.style.use("ggplot")

3. 两种绘图接口

Matplotlib提供两种绘图接口:有状态(stateful)和无状态(stateless)。在创建图形前,我们需要理解这两种方法的关联和差异。

3.1 有状态(stateful)接口

上面我们导入了matplotlib.pyplot,并重命名为plt(通用简称),plt子模块封装了非常多的绘图函数,例如plt.plot(), plt.title(), plt.legend()等等。具体有哪些函数,参考官方文档。

plt绘图函数就是有状态接口,因为它不要求明确地创建Figure和Axes等对象,这些函数会隐式地创建并跟踪这些对象。

接下来创建一幅简单的曲线图,说明这个概念。

# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 调用plt的绘图函数,会隐式地创建Figure, Axes对象并跟踪它们
# 先调用plt.plot()映射数据到x轴和y轴
# 然后调用plt.title()等函数添加或修改元素
plt.plot(x, y1, label="sin(x)")  # 添加曲线
plt.plot(x, y2, linestyle="dashed", label="cos(x)")  # 添加曲线
plt.title("Simple Line Plot")  # 添加标题
plt.xlabel("x")  # 添加x轴标签
plt.ylabel("y")  # 添加y轴标签
plt.legend()  # 显示图例

simple line plot

3.2 无状态(stateless)接口

无状态接口也被称为面向对象范式,它要求我们先明确创建Figure和Axes等对象,然后调用对象的方法来绘图。

plt.subplots()是创建Figure, Axes对象的最简单方法。

# 明确创建Figure和Axes对象
fig, ax = plt.subplots()

# 查看fig, ax对象类型
# print(type(fig))
# print(type(ax))

# 调用ax对象的方法绘图
ax.plot(x, y1, label="sin(x)")
ax.plot(x, y2, linestyle="dashed", label="cos(x)")
ax.set_title("Simple Line Plot")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()

simple line plot

通过上面两个简单的示例,大家应该明白两种接口的具体实现,以及它们的区别,这里需要深入探讨一下无状态接口的底层实现原理。

当我们调用plt.plot()或其它绘图函数时,它其实会先调用plt.gcf()和plt.gca()获取最新的Figure和Axes对象,然后再调用这些对象的方法。举个简单的例子,plt.title()会先调用plt.gca()获取“当前”的Axes对象,然后调用ax.set_title()。所以从根本上来说,plt函数只是装饰了面向对象接口,提供一个相对“简单”的方法来绘图。

初学者应该使用哪种方式?由于两种方式并没有根本区别,答案取决于个人偏好,笔者建议使用面向对象的方式,明确创建对象再调用方法,尽管这看上去更加复杂,并要求多写一些代码,但好处在于可以加深对matplotlib层次结构的认识,而且能够创建非常复杂的图形。

4. 保存图片

Matplotlib提供了保存图片的接口,这在制作报告时非常有用。

# 调用savefig函数,图片格式为png,此外还可以使用jpg, pdf等
# 调用fig.canvas.get_supported_filetypes()查看支持的格式
fig.savefig("./simple_line_plot.png")
# 重新加载图片,看是否成功
from IPython.display import Image
Image('simple_line_plot.png')

simple line plot

5. 结论

本文深入浅出的介绍了matplotlib的基础用法,包括对象层次结构,内置样式,有状态和无状态接口,以及如何保存图片。了解这些基础知识对于熟练掌握matplotlib至关重要。接下来我们将正式进入创作图形的阶段,包括曲线图,柱状图,散点图等。

如果喜欢我们的文章,记得点赞和收藏哦,我们会持续为大家带来Python, 数据科学和量化交易的精品内容。

【关于我们】

蜂鸟数据:开源金融数据库,聚合主流金融市场10000+时间序列,为广大金融从业者提供高质量的免费数据。我们的优势:1. 同时提供股票,外汇,商品期货的实时报价和历史数据;2. 提供高度统一的API接口,您可以把数据整合到自己的程序中,查看我们的API文档。

最后

以上就是明亮黑裤为你收集整理的Python数据可视化:走进matplotlib的世界的全部内容,希望文章能够帮你解决Python数据可视化:走进matplotlib的世界所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部