Python数据可视化大杀器之地阶技法:matplotlib(含详细代码)

简介: Python数据可视化大杀器之地阶技法:matplotlib(含详细代码)
最近小伙伴问我有什么刷题网站推荐,在这里推荐一下牛客网,里面包含各种面经题库,全是免费的题库,可以全方面提升你的职业竞争力,提升编程实战技巧,赶快来和我一起刷题吧!牛客网链接|python篇

Python数据可视化大杀器之地阶技法:matplotlib

  • 🌸个人主页:JoJo的数据分析历险记
  • 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
  • 💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏

一张好的图胜过一千个字,可视化也是机器学习的重要部分,它能够传达很多信息,之前我们介绍了如何使用seaborn绘制图形,观看量还不错:感兴趣的小伙伴可以看一下,
Python数据可视化大杀器之天阶技法:Seaborn(学完可实现90%数据分析绘图)
于是本章介绍python中另一个可视化利器:matplotlib

matplotlib可以使用各种后端图形库(如TkwxPython等)输出图形。使用命令行运行python时,图形通常显示在单独的窗口中。在Jupyter笔记本中,我们可以通过运行%matplotlib inline 魔法命令简单地在笔记本中输出图形。下面看具体代码:

# 首先导入相关库
import matplotlib.pyplot as plt
%matplotlib inline

🍂1.简单图形绘制

我们通过一个简单图形的绘制来解释matplotlib是如何工作的,具体如下

plt.plot([1, 2, 4, 9, 5, 3])
plt.show()


png

可以看出,我们简单的使用了plot函数绘制了一个折线图,如果给plot函数一个数组,它将使用该数组作为纵轴上的坐标,并且只使用数组中每个数据点的索引作为水平坐标。还可以提供两个数组:一个用于水平轴x,另一个用于垂直轴y

plt.plot([-3, -2, 5, 0], [1, 6, 4, 3])
plt.show()


png

轴会自动匹配数据的范围。我们想给这个图多一点空间,所以让我们调用axis函数来改变每个轴的范围[xmin,xmax,ymin,ymax]。

plt.plot([-3, -2, 5, 0], [1, 6, 4, 3])
plt.axis([-4, 6, 0, 7])
plt.show()


png

现在,让我们画一个数学函数。我们使用NumPylinspace函数创建一个包含500个从-2到2的浮点的数组x,然后创建第二个数组y,计算为x的平方。

import numpy as np
x = np.linspace(-2, 2, 500)#等间隔创建-2到2的500个数据
y = x**2
plt.plot(x, y)
plt.show()


png

上面这个图形有点简易,我们来添加一个标题,以及x和y标签,并绘制网格

plt.plot(x, y)
plt.title("Square function")#绘制标题
plt.xlabel("x")#x标签
plt.ylabel("y = x**2")#y标签
plt.grid(True)#显示网格
plt.show()


png

💮2.图片保存

将图形保存到电脑非常简单,使用savefig即可。具体代码如下所示

x = np.linspace(-1.4, 1.4, 30)
plt.plot(x, x**2)
plt.savefig("二次函数图.png")


png

这个时候在当前文件夹下会出现二次函数图.png文件

🏵️3.设置图形颜色和样式

默认情况下,matplotlib在连续点之间绘制一条直线。在某些情况下,为了方便对比信息,或者为了让图形更美观,我们需要对图形的颜色和形状进行设置

可以传递第三个参数来更改线条的样式和颜色。例如,“r--”表示“红色虚线”,具体代码如下所示。

x = np.linspace(-1, 1, 30)
plt.plot(x, x, 'r--')
plt.show()


png

当我们需要在一张图上绘制多条曲线时候,只需要指定x1y1[style1]x2y2[style2],具体如下所示

x = np.linspace(-1, 1, 30)
plt.plot(x, x, 'r--', x, x**2, 'g:', x, x**3, 'b^')
plt.show()


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Byb6ENYk-1651573628204)(output_21_0.png)]

此外,我们还可以设置透明度和线型宽度

x = np.linspace(-1, 1, 30)
p1,p2,p3 = plt.plot(x, x, 'r--', x, x**2, 'g:', x, x**3, 'b^')
p1.set_linewidth(3)
p3.set_alpha(0.3)
plt.show()


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tdv8RxZW-1651573628205)(output_23_0.png)]

🍁4.坐标轴尺度转换

Matplotlib支持非线性尺度转换,例如对数。

x = np.linspace(0.1, 15, 500)
y = x**3/np.exp(2*x)
plt.figure(1)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)
plt.figure(2)
plt.plot(x, y)
plt.yscale('log')#将y轴尺度变换为log
plt.title('log')
plt.grid(True)
plt.figure(3)
plt.plot(x, y)
plt.yscale('logit')#将y轴尺度变换为logit
plt.title('logit')
plt.grid(True)
plt.figure(4)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthreshy=0.05)#将y轴尺度变换为symlog
plt.title('symlog')
plt.grid(True)
plt.show()

png

png

png

png

🌺5.子图绘制

matplotlib图形可能包含多个子图。这些子图被组织在一个网格中。要创建子图,只需调用subplot函数,并指定图中的行数和列数,以及要绘制的子图的索引(从1开始,然后从左到右,从上到下)。

x = np.linspace(-1, 1, 30)
plt.subplot(2, 2, 1) #一共有两行两列,
plt.plot(x, x)
plt.subplot(2, 2, 2) 
plt.plot(x, x**2)
plt.subplot(2, 2, 3)  
plt.plot(x, x**3)
plt.subplot(2, 2, 4)  
plt.plot(x, x**4)
plt.show()


png

==注意==: 我们可以使用subplot(221)表示subplot(2,2,1)

如果我们想要将某个图形占据多个网格,我们可以使用下面的代码:

plt.subplot(2, 2, 1) 
plt.plot(x, x)
plt.subplot(2, 2, 2) 
plt.plot(x, x**2)
plt.subplot(2, 1, 2)  
plt.plot(x, x**3)  
plt.show()


png

如果需要设置更复杂的子图,可以使用subplot2grid,然后通过索引指定绘制的位置,从0开始索引,通过rowspancolspan来指定图形站的位置大小我们一起来看下面这个案例

plt.subplot2grid((3,3), (0, 0), rowspan=2, colspan=2)
plt.plot(x, x**2)
plt.subplot2grid((3,3), (0, 2))
plt.plot(x, x**3)
plt.subplot2grid((3,3), (1, 2), rowspan=2)
plt.plot(x, x**4)
plt.subplot2grid((3,3), (2, 0), colspan=2)
plt.plot(x, x**5)
plt.show()


png

但是每次我们都需要调用subplot()很繁琐,matplotlib允许使用subplots设置

x = np.linspace(-2, 2, 200)
fig,ax[0:2] = plt.subplots(2, 1, sharex=True)
fig.set_size_inches(10,5)
p1,p2 = ax[0].plot(x, np.sin(3*x**2), "r-", x, np.cos(5*x**2), "b-")
p3 = ax[1].plot(x, np.sin(3*x), "r-")
ax[0].grid(True)


png

🌻6.增加文本注释和图例

🌼6.1 增加文本

增加文本主要有以下两种方法

  • text
  • annotate

可以调用text在图中的任何位置添加文本。只需指定水平和垂直坐标以及文本,还可以选择指定一些额外的属性。看下面这个代码

x = np.linspace(-1.5, 1.5, 30)
px = 0.8
py = px**2

plt.plot(x, x**2, "b-", px, py, "ro")

plt.text(0, 1.5, "Square function\n$y = x^2$", fontsize=20, color='blue', horizontalalignment="center")
plt.text(px - 0.08, py, "Beautiful point", ha="right", weight="heavy")
plt.text(px, py, "x = %0.2f\ny = %0.2f"%(px, py), rotation=50, color='gray')

plt.show()


png

对图形的元素进行注释是很常见的,比如上面的漂亮点。我们可以使用annotate功能使这变得很容易:只需指示兴趣点的位置和文本的位置,以及文本和箭头的可选附加属性。

plt.plot(x, x**2, px, py, "ro")
plt.annotate("Beautiful point", xy=(px, py), xytext=(px-1.3,py+0.5),
                           color="green", weight="heavy", fontsize=14,
                           arrowprops={"facecolor": "lightgreen"})
plt.show()


png

plt.plot(x, x**2, px, py, "ro")
bbox_props = dict(boxstyle="rarrow,pad=0.3", ec="b", lw=2, fc="lightblue")
plt.text(px-0.2, py, "Beautiful point", bbox=bbox_props, ha="right")
bbox_props = dict(boxstyle="round4,pad=1,rounding_size=0.2", ec="black", fc="#EEEEFF", lw=5)
plt.text(0, 1.5, "Square function\n$y = x^2$", fontsize=20, color='black', ha="center", bbox=bbox_props)
plt.show()


png

🌷6.2 增加图例

添加图例的最简单方法是在所有行上设置一个标签,然后调用legend函数。

x = np.linspace(-1.4, 1.4, 50)
plt.plot(x, x**2, "r--", label="Square function")
plt.plot(x, x**3, "g-", label="Cube function")
plt.legend(loc="best")#设置图例位置
plt.grid(True)
plt.show()


png

设置图例位置参数如下所示:
best
upper right
upper left
lower left
lower right
right
center left
center right
lower center
upper center
center

🌱7.复杂图形绘制

上面我们介绍了如何建立一个基础图形,以及如何设置坐标轴、标题、坐标轴尺度转换、子图增加图例和注释等
接下来我们介绍一些更复杂的图形的绘制方法

🌲7.1 极坐标图

绘制极坐标图只需要在设置子图时,将projection属性设置为polar

radius = 1
theta = np.linspace(0, 2*np.pi*radius, 1000)

plt.subplot(111, projection='polar')
plt.plot(theta, np.sin(5*theta), "g-")
plt.plot(theta, 0.5*np.cos(20*theta), "b-")
plt.show()


png

🌳7.2 三维图

绘制3D图形需要导入Axes3D,然后创建一个子图,将projection设置为3d。这将返回一个Axes3DSubplot对象,可以使用它调用plot_surface,提供x、y和z坐标,以及可选属性。

from mpl_toolkits.mplot3d import Axes3D
x = np.linspace(-5, 5, 50)
y = np.linspace(-5, 5, 50)
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
figure = plt.figure(1, figsize = (12, 4))
subplot3d = plt.subplot(111, projection='3d')
surface = subplot3d.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=matplotlib.cm.coolwarm, linewidth=0.1)
plt.show()


png

绘制三维数据另一种方法是通过等高线图。

plt.contourf(X, Y, Z, cmap=matplotlib.cm.coolwarm)
plt.colorbar()
plt.show()


png

🌴7.3 绘制气泡图

气泡图是在散点图的基础上,加了一个s参数,数量越多,则该散点形状越大。

for color in ['red', 'green', 'blue']:
    x, y, scale= np.random.rand(3, 100)
    scale = 500 * scale ** 5
    plt.scatter(x, y, s=scale,c=color, alpha=0.3,edgecolors='blue')
plt.show()

本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!

相关文章
|
2天前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
20 11
|
22天前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
68 19
|
17天前
|
缓存 监控 测试技术
Python中的装饰器:功能扩展与代码复用的利器###
本文深入探讨了Python中装饰器的概念、实现机制及其在实际开发中的应用价值。通过生动的实例和详尽的解释,文章展示了装饰器如何增强函数功能、提升代码可读性和维护性,并鼓励读者在项目中灵活运用这一强大的语言特性。 ###
|
20天前
|
缓存 开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第35天】装饰器在Python中是一种强大的工具,它允许开发者在不修改原有函数代码的情况下增加额外的功能。本文旨在通过简明的语言和实际的编码示例,带领读者理解装饰器的概念、用法及其在实际编程场景中的应用,从而提升代码的可读性和复用性。
|
16天前
|
Python
探索Python中的装饰器:简化代码,提升效率
【10月更文挑战第39天】在编程的世界中,我们总是在寻找使代码更简洁、更高效的方法。Python的装饰器提供了一种强大的工具,能够让我们做到这一点。本文将深入探讨装饰器的基本概念,展示如何通过它们来增强函数的功能,同时保持代码的整洁性。我们将从基础开始,逐步深入到装饰器的高级用法,让你了解如何利用这一特性来优化你的Python代码。准备好让你的代码变得更加优雅和强大了吗?让我们开始吧!
22 1
|
21天前
|
设计模式 缓存 监控
Python中的装饰器:代码的魔法增强剂
在Python编程中,装饰器是一种强大而灵活的工具,它允许程序员在不修改函数或方法源代码的情况下增加额外的功能。本文将探讨装饰器的定义、工作原理以及如何通过自定义和标准库中的装饰器来优化代码结构和提高开发效率。通过实例演示,我们将深入了解装饰器的应用,包括日志记录、性能测量、事务处理等常见场景。此外,我们还将讨论装饰器的高级用法,如带参数的装饰器和类装饰器,为读者提供全面的装饰器使用指南。
|
18天前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
17天前
|
存储 缓存 监控
掌握Python装饰器:提升代码复用性与可读性的利器
在本文中,我们将深入探讨Python装饰器的概念、工作原理以及如何有效地应用它们来增强代码的可读性和复用性。不同于传统的函数调用,装饰器提供了一种优雅的方式来修改或扩展函数的行为,而无需直接修改原始函数代码。通过实际示例和应用场景分析,本文旨在帮助读者理解装饰器的实用性,并鼓励在日常编程实践中灵活运用这一强大特性。
|
21天前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
在Python中,图作为重要的数据结构,广泛应用于社交网络分析、路径查找等领域。本文介绍四种图的表示方法:邻接矩阵、邻接表、边列表和邻接集。每种方法都有其特点和适用场景,掌握它们能提升代码效率和可读性,让你在项目中脱颖而出。
28 5
|
19天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
40 2