个性化阅读
专注于IT技术分析

Matplotlib(Python绘图库)用法和实例图解

本文概述

Matplotlib教程

人的思维更适合数据的视觉表示, 而不是文本数据。当事物可视化时, 我们可以轻松理解它们。最好通过图形表示数据, 以便我们可以更有效地分析数据并根据数据分析做出特定决策。在学习matplotlib之前, 我们需要了解数据可视化以及为什么数据可视化很重要。

数据可视化

Matplotlib数据可视化

图形为探索数据提供了一种极好的方法, 这对于呈现结果至关重要。数据可视化是一个新名词。它表达的想法不仅仅涉及以图形形式表示数据(而不是使用文本形式)。

在发现和了解数据集时, 这可能非常有用, 并且可以帮助分类模式, 损坏的数据, 离群值等等。掌握一点领域知识, 就可以使用数据可视化来表示和演示图形和图表中的关键关系。静态确实确实集中在数据的定量描述和估计上。它提供了一套重要的工具, 可以帮助你定性地理解。

有五个关键图用于数据可视化。

Matplotlib数据可视化

有五个阶段对于组织做出决定至关重要:

Matplotlib数据可视化
  • 可视化:我们分析原始数据, 这意味着它使复杂的数据更易于访问, 易于理解和可用性。在用户将要查找特定测量值的地方, 使用表格数据表示法, 而几种类型的图表用于显示数据中一个或多个变量的模式或关系。
  • 分析:数据分析被定义为清理, 检查, 转换和建模数据以导出有用的信息。每当我们为业务或日常生活做出决定时, 都是根据过去的经验。选择一个特定的决定会发生什么, 无非是分析我们的过去。将来可能会受到影响, 因此必须进行适当的分析才能为任何企业或组织做出更好的决策。
  • 文档见解:文档见解是将有用数据或信息以标准格式组织在文档中的过程。
  • 转换数据集:使用标准数据可以更有效地做出决策。

为什么需要数据可视化?

为什么需要数据可视化

数据可视化可以执行以下任务:

  • 它确定了需要改进和关注的领域。
  • 它阐明了因素。
  • 它有助于了解将哪种产品放置在何处。
  • 预测销量。

数据可视化的好处

数据可视化有一些好处, 可帮助你为组织或企业做出有效的决策:

1.建立吸收信息的方式

数据可视化使用户可以接收有关运营和业务状况的大量信息。它有助于决策者查看多维数据集之间的关系。它提供了通过使用地图, 发烧图和其他丰富的图形表示来分析数据的新方法。

可视数据发现更有可能找到组织所需的信息, 然后最终比其他竞争性公司更具生产力。

2.可视化企业中的关系和模式

数据可视化的关键优势在于, 在当今竞争激烈的商业环境中, 找到运营条件与业务绩效之间的关联至关重要。

数据可视化的好处

进行这些类型的关联的能力使主管人员能够确定问题的根本原因并迅速采取行动以解决问题。

假设一家食品公司正在查看其每月客户数据, 并且该数据以条形图显示, 这表明该公司在该特定区域中的得分在过去几个月中下降了5分;数据表明该区域的客户满意度存在问题。

3.更快地对新兴趋势采取行动

数据可视化使决策者可以更有效地掌握多个数据集上客户行为和市场状况的变化。

对客户的情绪和其他数据有一个想法, 这为公司提供了一个新的机会, 使公司能够在竞争对手之前采取新的商机。

4.基于地质的可视化

由于许多网站都提供Web服务, 因此发生了地理空间可视化, 从而吸引了访问者的兴趣。需要这些类型的网站以利用特定于位置的信息, 这些信息已存在于客户详细信息中。

Matplotlib是一个Python库, 它定义为基于Numpy数组的多平台数据可视化库。它可以在python脚本, shell, Web应用程序和其他图形用户界面工具包中使用。

John D. Hunter最初在2002年构思了matplotlib。它具有活跃的开发社区, 并以BSD样式的许可证进行分发。其第一个版本于2003年发布, 最新版本3.1.1于2019年7月1日发布。

Matplotlib 2.0.x支持Python 2.7到3.6版本, 直到2007年6月23日为止。Python3支持始于Matplotlib 1.2。 Matplotlib 1.4是支持Python 2.6的最新版本。

有各种可用的工具包, 用于增强matplotlib的功能。其中一些工具是单独下载的, 其他工具可以随matplotlib源代码转移, 但具有外部依赖性。

  • Bashmap:这是一个地图绘制工具包, 其中包含多个地图投影, 海岸线和政治边界。
  • Cartopy:这是一个映射库, 由面向对象的地图投影定义以及任意点, 线, 面和图像转换功能组成。
  • Excel工具:Matplotlib为实用程序提供了便利, 可用于与Microsoft Excel交换数据。
  • Mplot3d:用于3D图。
  • Natgrid:这是Natgrid库的接口, 用于不规则网格化间隔数据。

Matplotlib体系结构

matplotlib的体系结构分为三个不同的层, 分别是:

  • 后端层
  • 艺术家层
  • 脚本层

后端层

后端层是该图的底层, 由绘图所需的各种功能的实现组成。后端层有三个基本类:FigureCanvas(将在其上绘制图形的表面), Renderer(负责在表面上绘制图形的类)和Event(它处理鼠标和键盘事件)。

艺术家层

艺术家层是体系结构中的第二层。它负责各种绘图功能, 例如轴, 这些功能协调如何在图形画布上使用渲染器。

脚本层

脚本层是我们大多数代码将在其上运行的最顶层。脚本层中的方法几乎会自动处理其他层, 而我们需要关心的只是当前状态(图和子图)。

Matplotlib的一般概念

Matplotlib图形可以分为以下几个部分:

Matplotlib的一般概念

图:这是一个整体图, 可以容纳一个或多个轴(曲线图)。我们可以将Figure看作是一块包含绘图的画布。

轴:一个图形可以包含多个轴。它由两个或三个(在3D情况下)Axis对象组成。每个轴由标题, x标签和y标签组成。

轴:轴是线状对象的数量, 负责生成图形限制。

艺术家:艺术家是我们在图形上看到的全部对象, 例如文本对象, Line2D对象和集合对象。大多数艺术家都与斧头息息相关。

安装Matplotlib

在首先开始使用Matplotlib或其绘图功能之前, 需要先安装它。 matplotlib的安装取决于计算机上安装的发行版。这些安装方法如下:

使用Python的Anaconda发行版

安装Matplotlib的最简单方法是下载Python的Anaconda发行版。 Matplotlib已预先安装在anaconda发行版中, 无需其他安装步骤。

  • 访问Anaconda的官方网站, 然后单击”下载”按钮
安装Matplotlib
  • 根据你的Python解释器配置选择下载。
安装Matplotlib

与Anaconda Prompt一起安装Matplotlib

可以通过键入命令将Matplotlib与Anaconda Prompt一起安装。要安装matplotlib, 请打开Anaconda Prompt并键入以下命令:

conda install matplotlib
安装Matplotlib

用pip安装Matplotlib

python软件包管理器pip也用于安装matplotlib。打开命令提示符窗口, 然后键入以下命令:

pip install matplotlib

验证安装

要验证是否正确安装了matplotlib, 请键入以下命令, 包括在终端中调用.__ version __。

import matplotlib
matplotlib.__version__
'3.1.1'

绘制图的基本示例

这是生成简单图形的基本示例;该程序如下:

from matplotlib import pyplot as plt
#ploting our canvas
plt.plot([1, 2, 3], [4, 5, 1])
#display the graph
plt.show()

输出

绘制图的基本示例

使用Python matplotlib只需三行即可绘制一个简单的图形。我们可以向图表添加标题, 标签, 这些标题, 标签由Python matplotlib库创建, 以使其更有意义。示例如下:

from matplotlib import pyplot as plt

x = [5, 2, 7]
y = [1, 10, 4]
plt.plot(x, y)
plt.title('Line graph')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()

输出

绘制图的基本示例

该图比以前的图更容易理解。

使用Pyplot

matplotlib.pyplot是集合命令样式的函数, 使matplotlib像使用MATLAB。 pyplot函数用于对图形进行一些更改, 例如创建图形, 在图形中创建绘图区域, 在绘图区域中绘制一些线条, 装饰包括标签的绘图等。

当我们想快速绘制某些东西而无需实例化任何图形或轴时, 最好使用它。

在使用matplotlib.pyplot时, 一些状态存储在函数调用之间, 以便跟踪当前图形和绘图区域之类的东西, 并将这些绘图函数定向到当前轴。

pyplot模块提供了plot()函数, 该函数经常用于绘制图形。让我们看一个简单的例子:

from matplotlib import pyplot as plt
plt.plot([1, 2, 3, 4, 5])
plt.ylabel("y axis")
plt.xlabel('x axis')
plt.show()

输出

使用Pyplot

在上面的程序中, 它绘制了图的x轴范围是0-4, y轴范围是1-5。如果我们向plot()提供一个列表, 则matplotlib假定它是y值的序列, 并自动生成x值。由于我们知道python索引从0开始, 因此默认x向量的长度与y相同, 但从0开始。因此x数据为[0, 1, 2, 3, 4]。

我们可以将任意数量的参数传递给plot()。例如, 要绘制x与y的关系图, 我们可以按照以下方式进行:

from matplotlib import pyplot as plt
plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
plt.ylabel("y axis")
plt.xlabel('x axis')
plt.show()

输出

使用Pyplot

格式化绘图样式

有一个可选的第三个参数, 它是一个格式字符串, 用于指示绘图的颜色和线条类型。默认格式字符串是” b-“, 这是纯蓝色, 你可以在上面的图表中看到。让我们考虑以下示例, 在该示例中, 我们用红色圆圈绘制图形。

from matplotlib import pyplot as plt
plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

输出

使用Pyplot

示例格式字符串

‘b’ 用于具有默认形状的蓝色标记。
‘ro’ Red circle
‘-g’ 绿色实线
‘–‘ 带有默认颜色的虚线
‘^k:’ 用虚线连接的黑色三角形向上标记

matplotlib支持以下颜色缩写:

Character Color
‘b’蓝色
‘g’ Green
‘r’ Red
‘c’ Cyan
‘m’ Magenta
‘y’ Yellow
‘k’ Black
‘w’ White

用分类变量绘图

Matplotlib允许我们将分类变量直接传递给许多绘图函数:考虑以下示例

from matplotlib import pyplot
names = ['Abhishek', 'Himanshu', 'Devansh']
marks= [87, 50, 98]

plt.figure(figsize=(9, 3))

plt.subplot(131)
plt.bar(names, marks)
plt.subplot(132)
plt.scatter(names, marks)
plt.subplot(133)
plt.plot(names, marks)
plt.suptitle('Categorical Plotting')
plt.show()

输出

使用Pyplot

在上面的程序中, 我们使用subplot()函数绘制了分类图。让我们看一下subplot()函数。

什么是subplot()

Matplotlib subplot()函数定义为在一个图中绘制两个或多个图。我们可以使用此方法来分离在同一轴上绘制的两个图形Matplotlib支持所有子图, 包括2×1垂直, 2×1水平或2×2网格。

它接受三个参数:nrows, ncols和index。它表示行数, 列数和索引。

可以通过以下方式调用subplot()函数:

subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)	
subplot(ax)

参数:

  • *参数:

三个独立的整数或三位整数描述子图的位置。如果三个整数依次为nrows, ncols和index, 则子图将在nrows行和ncol列的网格上取得索引位置。

参数pos是一个三位数的整数, 其中第一位数表示行数, 第二位数表示列数, 第三位数表示子图的索引。例如, 子图(1、3、2)与子图(132)相同。

注意:传递的整数必须小于10。

  • **夸克

subplot()函数还接受返回的轴基类的关键字参数。

考虑以下示例:

创建不同类型的图

1.折线图

折线图是将信息显示为一系列折线的图表之一。该图由plot()函数绘制。折线图易于绘制;让我们考虑以下示例:

from matplotlib import pyplot as plt

x = [4, 8, 9]
y = [10, 12, 15]

plt.plot(x, y)

plt.title("Line graph")
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()

输出

创建不同类型的图

我们可以通过导入样式模块来自定义图形。样式模块将内置在matplotlib安装中。它包含各种功能, 可以使情节更具吸引力。在下面的程序中, 我们使用样式模块:

from matplotlib import pyplot as plt
from matplotlib import style

style.use('ggplot')
x = [16, 8, 10]
y = [8, 16, 6]
x2 = [8, 15, 11]
y2 = [6, 15, 7]
plt.plot(x, y, 'r', label='line one', linewidth=5)
plt.plot(x2, y2, 'm', label='line two', linewidth=5)
plt.title('Epic Info')
fig = plt.figure()
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.legend()
plt.grid(True, color='k')
plt.show()

输出

创建不同类型的图

在Matplotlib中, 图形(类plt.Figure的一个实例)可以被认为是一个包含所有表示轴, 图形, 文本和标签的对象的容器。

示例3

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.axes()

x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x))

输出

创建不同类型的图

matplotlib提供fill_between()函数, 该函数用于根据用户定义的逻辑填充线周围的区域。

示例4

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = plt.axes()

x = np.linspace(0, 10, 1000)
ax.plot(x, np.sin(x))


import matplotlib.pyplot as plt
import numpy as np

x = np.arange(0.0, 2, 0.01)
y1 = np.sin(2 * np.pi * x)
y2 = 1.2 * np.sin(4 * np.pi * x)
fig, ax = plt.subplots(1, sharex=True)
ax.plot(x, y1, x, y2, color='black')
ax.fill_between(x, y1, y2, where=y2 >= y1, facecolor='blue', interpolate=True)
ax.fill_between(x, y1, y2, where=y2 <= y1, facecolor='red', interpolate=True)
ax.set_title('fill between where')

输出

创建不同类型的图

2.条形图

条形图是最常见的图类型之一, 用于显示与分类变量关联的数据。 Matplotlib提供了一个bar()来制作条形图, 该条形图接受诸如以下变量:分类变量, 其值和颜色。

from matplotlib import pyplot as plt
players = ['Virat', 'Rohit', 'Shikhar', 'Hardik']
runs = [51, 87, 45, 67]
plt.bar(players, runs, color = 'green')
plt.title('Score Card')
plt.xlabel('Players')
plt.ylabel('Runs')
plt.show()

输出

创建不同类型的图

另一个函数barh()用于制作水平条形图。它接受xerr或yerr作为参数(在垂直图的情况下), 以如下描述数据的方差:

from matplotlib import pyplot as plt
players = ['Virat', 'Rohit', 'Shikhar', 'Hardik']
runs = [51, 87, 45, 67]
plt.barh(players, runs, color = 'green')
plt.title('Score Card')
plt.xlabel('Players')
plt.ylabel('Runs')
plt.show()

输出

创建不同类型的图

让我们看看使用style()函数的另一个示例:

from matplotlib import pyplot as plt
from matplotlib import style

style.use('ggplot')

x = [5, 8, 10]
y = [12, 16, 6]

x2 = [6, 9, 11]
y2 = [7, 15, 7]


plt.bar(x, y, color = 'y', align='center')
plt.bar(x2, y2, color='c', align='center')

plt.title('Information')

plt.ylabel('Y axis')
plt.xlabel('X axis')

输出

创建不同类型的图

与垂直堆叠类似, 使用底部参数将条形图放在一起, 并定义要在其下方堆叠的条形图及其值。

from matplotlib import pyplot as plt
import numpy as np

countries = ['USA', 'India', 'China', 'Russia', 'Germany']
bronzes = np.array([38, 17, 26, 19, 15])
silvers = np.array([37, 23, 18, 18, 10])
golds = np.array([46, 27, 26, 19, 17])
ind = [x for x, _ in enumerate(countries)]

plt.bar(ind, golds, width=0.5, label='golds', color='gold', bottom=silvers+bronzes)
plt.bar(ind, silvers, width=0.5, label='silvers', color='silver', bottom=bronzes)
plt.bar(ind, bronzes, width=0.5, label='bronzes', color='#CD853F')

plt.xticks(ind, countries)
plt.ylabel("Medals")
plt.xlabel("Countries")
plt.legend(loc="upper right")
plt.title("2019 Olympics Top Scorers")

输出

创建不同类型的图

3.饼图

饼图是在饼图的段或切片中细分的圆形图。它通常用于表示百分比或比例数据, 其中每个饼图代表一个特定类别。让我们看下面的例子:

from matplotlib import pyplot as plt

# Pie chart, where the slices will be ordered and plotted counter-clockwise:
Players = 'Rohit', 'Virat', 'Shikhar', 'Yuvraj'
Runs = [45, 30, 15, 10]
explode = (0.1, 0, 0, 0)  # it "explode" the 1st slice 

fig1, ax1 = plt.subplots()
ax1.pie(Runs, explode=explode, labels=Players, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle.

plt.show()

输出

创建不同类型的图

4.直方图

首先, 我们需要了解条形图和直方图之间的区别。直方图用于分布, 而条形图用于比较不同的实体。直方图是一种条形图, 它显示了与一组值范围相比较的多个值的频率。

例如, 我们获取不同年龄组的数据, 并针对垃圾箱绘制直方图。现在, bin代表划分为一系列间隔的值的范围。通常会创建相同大小的垃圾箱。

from matplotlib import pyplot as plt
from matplotlib import pyplot as plt
population_age = [21, 53, 60, 49, 25, 27, 30, 42, 40, 1, 2, 102, 95, 8, 15, 105, 70, 65, 55, 70, 75, 60, 52, 44, 43, 42, 45]
bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
plt.hist(population_age, bins, histtype='bar', rwidth=0.8)
plt.xlabel('age groups')
plt.ylabel('Number of people')
plt.title('Histogram')
plt.show()

输出

创建不同类型的图

让我们考虑另一个绘制直方图的示例:

from matplotlib import pyplot as plt
# Importing Numpy Library
import numpy as np
plt.style.use('fivethirtyeight')

mu = 50
sigma = 7
x = np.random.normal(mu, sigma, size=200)
fig, ax = plt.subplots()

ax.hist(x, 20)
ax.set_title('Historgram')
ax.set_xlabel('bin range')
ax.set_ylabel('frequency')

fig.tight_layout()
plt.show()

输出

创建不同类型的图

5.散点图

当我们需要定义一个变量受另一变量影响多少时, 散点图通常用于比较变量。数据显示为点的集合。每个点都有一个变量的值, 该变量定义了水平轴上的位置, 另一个变量的值表示了垂直轴上的位置。

让我们考虑以下简单示例:

示例1:

from matplotlib import pyplot as plt
from matplotlib import style
style.use('ggplot')

x = [5, 7, 10]
y = [18, 10, 6]

x2 = [6, 9, 11]
y2 = [7, 14, 17]

plt.scatter(x, y)

plt.scatter(x2, y2, color='g')

plt.title('Epic Info')
plt.ylabel('Y axis')
plt.xlabel('X axis')

plt.show()

输出

创建不同类型的图

示例2

import matplotlib.pyplot as plt
x = [2, 2.5, 3, 3.5, 4.5, 4.7, 5.0]
y = [7.5, 8, 8.5, 9, 9.5, 10, 10.5]

x1 = [9, 8.5, 9, 9.5, 10, 10.5, 12]
y1 = [3, 3.5, 4.7, 4, 4.5, 5, 5.2]
plt.scatter(x, y, label='high income low saving', color='g')
plt.scatter(x1, y1, label='low income high savings', color='r')
plt.xlabel('saving*100')
plt.ylabel('income*1000')
plt.title('Scatter Plot')
plt.legend()
plt.show()

输出

创建不同类型的图

6. 3D图形图

Matplotlib最初仅使用二维图进行开发。它的1.0版本是在二维显示的基础上使用一些三维绘图实用程序构建的, 其结果是提供了一套方便的3D数据可视化工具。

可以通过导入mplot3d工具包(主要Matplotlib安装随附)来创建三维图。

from mpl_toolkits import mplot3d

在程序中导入此模块后, 可以通过将关键字projection =’3d’传递给任何普通轴创建例程来创建三维轴:

让我们看一下简单的3D图

示例1:

from mpltoolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')_

输出

创建不同类型的图

示例2:

from mpl_toolkits import mplot3d
import numpy as np
import matplotlib.pyplot as plt

height = np.array([100, 110, 87, 85, 65, 80, 96, 75, 42, 59, 54, 63, 95, 71, 86])
weight = np.array([105, 123, 84, 85, 78, 95, 69, 42, 87, 91, 63, 83, 75, 41, 80])


scatter(height, weight)

fig = plt.figure()
ax = plt.axes(projection='3d')
# This is used to plot 3D scatter
ax.scatter3D(height, weight)
plt.title("3D Scatter Plot")
plt.xlabel("Height")
plt.ylabel("Weight")
plt.title("3D Scatter Plot")
plt.xlabel("Height")
plt.ylabel("Weight")

plt.show()

输出

创建不同类型的图

注意:我们可以使用plot3D()绘制简单的3D折线图。

示例3

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams['legend.fontsize'] = 10

fig = plt.figure()
ax = fig.gca(projection='3d')
theta1 = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta1)
y = r * np.cos(theta1)
ax.plot3D(x, y, z, label='parametric curve', color = 'red')
ax.legend()

plt.show()

输出

创建不同类型的图

Matplotlib的重要功能

Functions Description
图(x轴值, y轴值) 它用于绘制具有x轴值与y轴值的简单折线图。 show()用于显示图形。
title(“string”) 它用于设置由字符串指定的绘图图的标题。
xlabel(“string”) 用于设置字符串指定的x轴标签。
ylabel(“string”) 用于设置字符串指定的y轴标签。
figure() 它用于控制图形级属性。
子图(nrows, ncol, index) 用于将子图添加到最近的图形。
subtitle(“string”) 它将公共标题添加到由字符串指定的绘图图中。
子图(rows, ncols, figsize) 它提供了一种在一次调用中创建子图的简单方法, 并返回图形和轴数的元组。
set_title(“string”) 这是一种轴级方法, 用于设置子图的标题。
条(分类变量, 值, 颜色) 它用于创建垂直条形图。
barh(分类变量, 值, 颜色) 它用于创建水平条形图。
legend(loc) 它用于制作图例。
xtricks(索引, 分类变量) 它用于设置或获取x轴的当前刻度位置标签。
饼图(值, 分类变量) 它用于创建饼图。
历史(值, 箱数) 它用于创建直方图。
xlim(起始值, 终止值) 用于设置x轴的极限值。
ylim(起始值, 终止值) 用于设置y轴的值限制。
散点图(x轴值, y轴值) 它用于绘制x轴值与y轴值的散点图。
axes() 用于将轴添加到最近的图形。
set_xlabel(“string”) 这是一种轴级方法, 用于设置指定为字符串的绘图的x标签。
set_ylabel(“string”) 它用于设置指定为字符串的图的y标签。
scatter3D(x轴值, y轴值) 它用于绘制三维散点图, 其中x轴值相对于y轴。
plot3D(x轴值, y轴值) 它用于绘制x轴值与y轴值的三维折线图。

在本教程中, 我们了解了matplotlib(Python库), 其中涵盖了数据可视化的简要介绍以及数据可视化对于做出组织决策至关重要。我们为数据的图形表示绘制了不同类型的图。


赞(0) 打赏
未经允许不得转载:srcmini » Matplotlib(Python绘图库)用法和实例图解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏