Python可视化 5. 使用Matplotlib数据可视化

全文共4750字,预计阅读时间20分钟。

第五章 使用NumPy和Matplotlib进行数据可视化

目录

一、Matplotlib
二、使用NumPy和Matplotlib实现可视化
三、单线图(Single Line Plots)
四、多线图(Multiline Plots)
五、网格、轴和标签(Grid,Axes,and Labels)
六、颜色、样式和标记(Colors,Style,and Markers)
❤总结

第四章「科学Python生态和Numpy」介绍了NumPy的基本知识。你学习了如何安装NumPy以及如何创建ndarrays。在本章中,我们将通过查看一些ndarray创建程序来继续学习NumPy。我们也会着手学习科学计算生态系统的数据可视化库——Matplotlib。我们将使用NumPy ndarray创建程序(程序的作用类似于函数,但含义更为丰富一些。程序是某个系统对外提供的功能接口或服务的集合。比如操作系统的API、服务等就是程序。)。来演示Matplotlib的可视化效果。本章内容比较详细,重点是编程以及可视化。本章介绍以下内容:

· Matplotlib

· 使用NumPy和Matplotlib实现可视化

· 单线图

· 多线图

· 网格、轴和标签

· 颜色、样式和标记

在本书的其余章节中,我们将使用Matplotlib和NumPy演示数据可视化。

一、Matplotlib

Matplotlib是SciPy的重要组成部分,用于可视化。它是NumPy的扩展。它提供了一个类似MATLAB的绘图和可视化界面。它最初是由 John D Hunter开发的,作为一种可用于Python的开源替代方案。

我们可以使用Jupyter Notebook安装它,如下所示:

!pip3 install matplotlib

要在笔记本中使用它进行基本的绘图操作,必须按如下方式导入其pyplot模块:

import matplotlib.pyplot as plt

此外,要在笔记本中显示Matplotlib可视化效果,必须运行以下命令:

%matplotlib inline

这将使得Matplotlib在产生可视化效果的代码单元格的正下方内联显示输出。当我们使用Matplotlib时,我们将始终使用这种内联输出。

还需要导入NumPy,如下所示:

import numpy as np

有关Matplotlib的详细信息,请访问https://matplotlib.org/。

二、使用NumPy和Matplotlib实现可视化

我们现在将学习如何使用ndarray创建程序来创建NumPy ndarrays,然后使用Matplotlib将它们可视化。现在先开始创建ndarray的程序。

第一个程序是arange(),它以给定的间隔创建均匀分布的值。终止值(stop value)参数是十分必要的。开始值(start value)和间隔(interval)参数的默认值分别为0和1。下面让我们看一个例子:

x = np.arange(5)

在本例中,终止值是5,因此它创建一个从0开始到4结束的ndarray。函数返回具有半开放间隔(相当于数学定义中的开区间)的序列,这意味着终止值不包含在输出中。由于我们没有指定间隔,所以它默认是1。我们可以看到它的输出和数据类型如下:

print(x)

type(x)

以下是输出:

[0 1 2 3 4]

numpy.ndarray

接下来绘制这些数字。对于二维绘图,我们需要X-Y对。为求简洁,设定y = f(x) = x,并运行下面的语句表示这个函数关系(X-Y对):

y=x

现在,使用函数plot()将其可视化。它需要X、Y的值和绘制选项(plotting options)作为参数。我们将在本章后面了解有关绘制选项的更多信息。

plt.plot(x, y, 'o--')

plt.show()

函数show()画出图形。正如我们在上面所看到的,我们输入也就是使用的绘制选项是o--。这表示点用实心圆表示,线用虚线表示,如图(5-1)所示:

下面看函数arange()的函数调用示例,其start和stop参数如下:

np.arange(2, 6)

它会返回以下输出(直接打印,我们不将其存储为变量):

array([2, 3, 4, 5])

我们甚至可以设置间隔参数,如下所示:

np.arange(2, 6, 2)

以下是输出:

array([2, 4])

输出如图(5-2)所示:

函数linspace(start,stop,number)返回指定间隔内的等距数字。我们必须将开始值、终止值和值的数目传递给它,如下所示:

N = 11

x = np.linspace(0, 10, N)

print(x)

该代码创建11个数字(0–10,包括0和10),如下所示:

[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]

如下,将它可视化:

y = x

plt.plot(x, y, 'o--')

plt.axis('off')

plt.show()

输出如图(5-3)所示:

如你所见,我们使用plt.axis('off')将轴关掉了,所以没有绘制出来。

类似地,我们可以计算并可视化logspace( logspace是对数等比数列创建函数,np.logspace(start=开始值,stop=结束值,num=元素个数,base=指定对数的底, endpoint=是否包含结束值))函数中的值,如下所示:

y = np.logspace(0.1, 1, N)

print(y)

plt.plot(x, y, 'o--')

plt.show()

输出如图(5-4)所示:

我们甚至可以计算几何级数(等比数列)中的一个级数,如下所示:

y = np.geomspace(0.1, 1000, N)

print(y)

plt.plot(x, y, 'o--')

plt.show()

输出如图(5-5)所示:

三、单线图(Single Line Plots)

在本节中,我们将探讨几种绘制单线图的方法。我们使用函数plot()绘制图形。如果图形中只有一个使用函数plot()的可视化,则称为单线图。下面会用几个例子来进一步探讨这个问题。

我们还可以使用Python列表(list)来可视化图形,如下所示:

x = [1, 4, 5, 2, 3, 6]

plt.plot(x)

plt.show()

输出如图(5-6)所示:

在这种情况下假设了y轴的值。下面是另一个例子:

x = np.arange(10)

plt.plot(x)

plt.show()

输出如图(5-7)所示:

接下来可视化一个二次方程y=f(x)=x²的图形,代码如下所示:

plt.plot(x, [y**2 for y in x])

plt.show()

输出如图(5-8)所示:

可以用一种简单的方法编写代码达到同样目的:

plt.plot(x, x**2)

plt.show()

四、多线图(Multiline Plots)

我们可以在同一个可视化中显示多个绘图。看看下面这个例子就能知道如何在同一个可视化中显示多条曲线:

x = np.arange(10)

plt.plot(x, x**2)

plt.plot(x, x**3)

plt.plot(x, x*2)

plt.plot(x, 2**x)

plt.show()

输出如图(5-9)所示:

可以看到,Matplotlib会自动为不同曲线指定不同颜色。

下面是上述代码的简化版本:

plt.plot(x, x**2, x, x**3, x, x*2, x, 2**x)

plt.show()

输出与图(5-9)相同。

下面是另一个例子:

x = np.array([[1, 2, 6, 3], [4, 5, 3, 2]])

plt.plot(x)

plt.show()

输出如图(5-10)所示:

五、网格、轴和标签(Grid,Axes,and Labels)

我们前面看到了如何在可视化中启用网格,可以用语句plt.grid(True)来完成该项操作。现在我们将学习如何控制轴的边界,然而在此之前,我们将快速学习如何将一个可视化输出保存为图像。请看以下代码:

x = np.arange(3)

plt.plot(x, x**2, x, x**3, x, 2*x, x, 2**x)

plt.grid(True)

plt.savefig('test.png')

plt.show()

语句plt.savefig('test.png')将图像保存在Jupyter Notebook文件的当前目录中。输出如图(5-11)所示:

我们可以看到轴的边界是默认设置的。我们可以将它们设置为如下所示的特定值:

x = np.arange(3)

plt.plot(x, x**2, x, x**3, x, 2*x, x, 2**x)

plt.grid(True)

plt.axis([0, 2, 0, 8])

print(plt.axis())

plt.show()

输出如图(5-12)所示:

语句plt.axis([0, 2, 0, 8])设置了轴的值。第一对(0,2)表示x轴的限制,第二对(0,8)表示y轴的限制。我们可以使用函数xlim()和ylim()编写语法不同的代码,如下所示:

x = np.arange(3)

plt.plot(x, x**2, x, x**3, x, 2*x, x, 2**x)

plt.grid(True)

plt.xlim([0, 2])

plt.ylim([0, 8])

plt.show()

此代码产生与上图(5-12)完全相同的输出。可以按如下方式添加轴的标题和标签:

x = np.arange(3)

plt.plot(x, x**2, x, x**3, x, 2*x, x, 2**x)

plt.grid(True)

plt.xlabel('x = np.arange(3)')

plt.xlim([0, 2])

plt.ylabel('y = f(x)')

plt.ylim([0, 8])

plt.title('Simple Plot Demo')

plt.show()

它生成的输出包括标签和标题,如图(5-13)所示:

我们可以在plot()函数中传递参数label,然后调用函数legend()来创建图例,如下所示:

x = np.arange(3)

plt.plot(x, x**2, label='x**2')

plt.plot(x, x**3, label='x**3')

plt.plot(x, 2*x, label='2*x')

plt.plot(x, 2**x, label='2**x')

plt.legend()

plt.grid(True)

plt.xlabel('x = np.arange(3)')

plt.xlim([0, 2])

plt.ylabel('y = f(x)')

plt.ylim([0, 8])

plt.title('Simple Plot Demo')

plt.show()

这将产生一个带有图例的曲线输出,如图(5-14)所示:

不需要像上面一样将图例作为参数传递给函数plot(),我们可以将字符串列表作为参数传递给函数legend(),如下所示:

x = np.arange(3)

plt.plot(x, x**2, x, x**3, x, 2*x, x, 2**x)

plt.legend(['x**2', 'x**3', '2*x', '2**x'])

plt.grid(True)

plt.xlabel('x = np.arange(3)')

plt.xlim([0, 2])

plt.ylabel('y = f(x)')

plt.ylim([0, 8])

plt.title('Simple Plot Demo')

plt.show()

将产生和上图(5-14)相同的输出。

我们还可以通过对前面的代码进行以下更改来更改图例框的位置:

plt.legend(['x**2', 'x**3', '2*x', '2**x'], loc='upper center')

输出如图(5-15)所示:

六、颜色、样式和标记(Colors,Style,and Markers)

到目前为止,对于多行打印,我们已经知道Matplotlib会自动指定颜色、样式和标记。我们还看到了一些定制它们的示例。在本节中,我们将详细介绍如何自定义它们。

先从颜色开始。下面的代码列出了Matplotlib支持的所有原色(在本例中,我们暂时不自定义样式和标记)。

x = np.arange(5)

y = x

plt.plot(x, y+1, 'g')

plt.plot(x, y+0.5, 'y')

plt.plot(x, y, 'r')

plt.plot(x, y-0.2, 'c')

plt.plot(x, y-0.4, 'k')

plt.plot(x, y-0.6, 'm')

plt.plot(x, y-0.8, 'w')

plt.plot(x, y-1, 'b')

plt.show()

输出如图(5-16)所示:

我们还可以编写如下代码:

plt.plot(x, y+1, 'g', x, y+0.5, 'y', x, y, 'r', x, y-0.2, 'c', x, y-0.4, 'k', x, y-0.6, 'm', x, y-0.8, 'w', x, y-1, 'b')

plt.show()

输出将与上图(5-16)完全相同。

下面介绍样式的自定义。我们可以按以下方式自定义线条样式:

plt.plot(x, y, '-', x, y+1, '--', x, y+2, '-.', x, y+3, ':')

plt.show()

输出如图(5-17)所示:

你甚至可以改变标记,如下所示:

plt.plot(x, y, '.')

plt.plot(x, y+0.5, ',')

plt.plot(x, y+1, 'o')

plt.plot(x, y+2, '<')

plt.plot(x, y+3, '>')

plt.plot(x, y+4, 'v')

plt.plot(x, y+5, '^')

plt.plot(x, y+6, '1')

plt.plot(x, y+7, '2')

plt.plot(x, y+8, '3')

plt.plot(x, y+9, '4')

plt.plot(x, y+10, 's')

plt.plot(x, y+11, 'p')

plt.plot(x, y+12, '*')

plt.plot(x, y+13, 'h')

plt.plot(x, y+14, 'H')

plt.plot(x, y+15, '+')

plt.plot(x, y+16, 'D')

plt.plot(x, y+17, 'd')

plt.plot(x, y+18, '|')

plt.plot(x, y+19, '_')

plt.show()

输出如图(5-18)所示:

所有三种特性(颜色、标记和线样式)都可以组合在一起,以达到自定义可视化效果的目的,如下所示:

plt.plot(x, y, 'mo--')

plt.plot(x, y+1 , 'g*-.')

plt.show()

输出如图(5-19)所示:

这些是基本的自定义,但你可以更详细地定制所有内容。例如,使用此代码自定义其他详细信息:

plt.plot(x, y, color='g', linestyle='--',

linewidth=1.5,

marker='^', markerfacecolor='b',

markeredgecolor='k',

markeredgewidth=1.5, markersize=5)

plt.grid(True)

plt.show()

输出如图(5-20)所示:

你甚至可以自定义x轴和y轴上的值,如下所示:

x = y = np.arange(10)

plt.plot(x, y, 'o--')

plt.xticks(range(len(x)), ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])

plt.yticks(range(0, 10, 1))

plt.show()

输出如图(5-21)所示:

❤总结

本章重点介绍可用于可视化的各种自定义设置。我们学到了很多可视化数据的知识。本章所涵盖的概念将在本书中被用来可视化数据。

在下一章中,我们将进一步探讨数据可视化。我们将学习形象化的图像和三维形状,并在图像操作的基础上查看这些基础知识。

(0)

相关推荐

  • Python可视化.1

    https://matplotlib.org/stable/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usag ...

  • 第92天:Python Matplotlib 进阶操作

    本章节主要是 Matplotlib 和 NumPy  实际操作案例讲解,matplotlib 通常与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,除此之外,它还可以和其他图形工 ...

  • 手把手教你用Matplotlib进行数据可视化

    导读:Matplotlib是建立在NumPy数组上的一个多平台数据可视化库.在2002年,约翰·亨特(John Hunter)提出Matplotlib,最初的构思是设计为IPython的一个补丁,以便 ...

  • matplotlib pyplot 画图基础教程

    用Python绘制图表在工作中是一项非常有用的技能,虽然说强大的matlab基本可以满足我们所有的绘图需求,但是在有些情况下,使用Python绘图,让图表直接可以直接随着Python程序的运行而产生. ...

  • python 画正弦曲线

    要画正弦曲线先设定一下x的取值范围,从0到2π.要用到numpy模块. numpy.pi 表示π numpy.arange( 0 , 2π ,0.01)  从0到2π,以0.01步进. 令 x=num ...

  • 6行python代码的爱心线

    前些日子在做绩效体系的时候,遇到了一件囧事,居然忘记怎样在Excel上拟合正态分布了,尽管在第二天重新拾起了Excel中那几个常见的函数和图像的做法,还是十分的惭愧.实际上,当时有效偏颇了,忽略了问题 ...

  • Python绘制参数方程图

    vscode里面自动的jupyter,有毒,用不了...要执行下面的操作 pip install pip-autoremove pip-autoremove.exe jupyter -y pip in ...

  • matplotlib 必知的 15 个图

    Python小例子会持续帮助大家,解决Python学习中遇到的各种问题,并以此为使命,砥砺前行.如果你觉得此号还可以,欢迎星标: 点击最上方蓝色字Python小例子,进入Python小例子界面,点击右 ...

  • 5 种快速易用的 Python Matplotlib 数据可视化方法

    Python编程学习圈 2021-09-26 数据可视化是数据科学家工作的重要部分.在项目的早期阶段,我们通常需要进行探索性数据分析来获得对数据的洞察.通过数据可视化可以让该过程变得更加清晰易懂,尤其 ...

  • 洞见未来|电力可视化运营大脑——BI数据可视化建设方案

    背景介绍 目前数据是电力企业的战略资源,数据可视化分析已经成为电力行业发电运行.故障检修.用电客户活动.燃料供应.发电能力评估.发电报价与交易.预算与计划业务应用.智能分析决策的重要基石.电力企业数据 ...

  • python|数据可视化之matplotlib画图

    前言相信大家在现阶段被大数据时代带来大量的数据和一些文章而不能清楚直观地了解其中真正关键的数据,所以小编给大家带来一种简单的数据可视化的解决方案-利用matplotlib函数来制作简单的直方图.运行环 ...

  • 深度盘点 | 史上最全python数据可视化库

    有多少同学和小编一样,学习python的主要目的,是为了实现数据可视化?

  • (2条消息) 数据可视化技术:python数据可视化工具库汇总(共21个)

    Python数据可视化库 在数据分析中最好展示数据的方式就是形象地绘制对应的图像,让人能够更好地理解数据.什么样的数据.什么样的场景用什么样的图表都是有一定的规定的.(这个以后写一篇博客来记录一下.当 ...

  • Python数据可视化的完整版操作指南(建议收藏)

    让我们看一下使用Python进行数据可视化的主要库以及可以使用它们完成的所有类型的图表.我们还将看到建议在每种情况下使用哪个库以及每个库的独特功能. 我们将从最基本的可视化开始,直接查看数据,然后继续 ...

  • Python数据可视化:数据分析中的6个常用图

    折线图: 折线图用于显示数据在一个连续的时间间隔或者时间跨度上的变化,它的特点是反映事物随时间或有序类别而变化的趋势.示例图如下: 折线图应用场景: 折线图适合X轴是一个连续递增或递减的,对于没有规律 ...

  • Python数据可视化:一张很漂亮的商业图

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Lin王发林,作者:WangFalin Python数据分析: ...

  • Python数据可视化库有哪些?Python入门

    现如今,数据已经渗透到每一个行业和业务职能领域,成为重要的生产因素,正因如此数据分析岗位变得异常火爆.而Python作为数据分析的首选语言,它不仅有着独特的优势,还为数据分析提供了很多库,那么常见的P ...