Python Matplotlib

时间:2020-02-23 14:43:00  来源:igfitidea点击:

Python matplotlib库帮助我们以最简单的方式在图形上绘制数据。
如果您熟悉MATLAB绘图,那么Matplotlib将很容易用于基本绘图。

Python Matplotlib

为了开始理解Matplotlib如何帮助我们构建图形和可视化图形来表示数据,我们需要了解一些基本术语,我们将在本文中大量使用这些术语。
让我们先研究这些术语。

Python Matplotlib术语

  • "图形完成"窗口或者绘制图形的页面。

  • 轴是绘制数据的区域。
    可以是X轴或者Y轴等。

  • Spine是连接轴点的线。

安装Matplotlib

使用pip可以很容易地安装python matplotlib库:

pip install matplotlib

而已!现在,我们准备使用此数据可视化库构建一些很酷的示例。

Matplotlib入门

在本节中,我们将开始绘制图并开始将数据馈送到python matplotlib函数。

Matplotlib线图

我们将从一个非常基本的绘图示例开始。
我们将仅使用两个Python列表作为图形点的数据源。
让我们为此编写一个代码段:

import matplotlib.pyplot as plt

year = [1950, 1975, 2000, 2016]
population = [2.12, 3.681, 5.312, 6.981]

plt.plot(year, population)
plt.show()

注意带有show()函数的最后一行。
否则请务必注意,否则该图将不会显示在屏幕上。
运行此代码时,我们可以看到以下图形:注意,我们还可以使用以下代码段为该图形提供标题并为我们的轴提供标签:

...
plt.xlabel('Year')
plt.ylabel('Population')
plt.title('World Population')

Matplotlib散点图

上面的曲线图非常表明阵列中实际上没有通过的点,因为它显示了一条线。
如果我们只想查看图中的实际点怎么办?散点图可实现以下目的:

import matplotlib.pyplot as plt

year = [1950, 1975, 2000, 2016]
population = [2.12, 3.681, 5.312, 6.981]

plt.scatter(year, population)
plt.show()

运行此代码时,我们可以看到如下图所示:

Matplotlib历史图

在本节中,我们向您介绍直方图。
图表说明了我们数据的变化方式,而直方图则描述了数据的分布方式。
范围中的值越多,范围的条形越高。

我们使用hist()函数制作直方图。
它具有两个重要参数:

  • 要绘制的值列表
  • 将这些点分布到的范围数

让我们用一个代码片段来演示这一点:

import matplotlib.pyplot as plt

values = [0, 1.2, 1.3, 1.9, 4.3, 2.5, 2.7, 4.3, 1.3, 3.9]
plt.hist(values, bins = 4)
plt.show()

bins的设置很重要。
较少数量的存储箱可以隐藏数据分发的真实性,而过多的存储箱则会使真实性过于复杂。

Matplotlib图中的自定义

如果您注意到第一个线条图,我们会看到Y轴并非从0开始。
我们可以对其进行修改:

...
plt.yticks([0, 2, 4, 6, 8, 10])

在Matplotlib中绘制多条曲线

在单个图形上绘制多条曲线进行比较是非常普遍的。
让我们在这里尝试一下:

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
cos, sin = np.cos(X), np.sin(X)

plt.plot(X, cos)
plt.plot(X, sin)

plt.show()

运行此代码时,可以看到如下图所示:因此,只需多次调用plot即可。
要添加的是,我们使用numpy创建了一条非线性曲线!

在Matplotlib绘图中更改颜色并添加图例

正如我们所看到的,曲线看起来不错,但不是都一样吗?如果我们想更改其颜色并显示每种颜色代表什么呢?让我们尝试一起绘制正弦和余弦曲线:

import numpy as np
import matplotlib.pyplot as plt

X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
cos, sin = np.cos(X), np.sin(X)

plt.plot(X, cos, color='blue', label="cosine")
plt.plot(X, sin, color='red', label="sine")
plt.legend(loc='upper left', frameon=False)

plt.show()

运行此代码时,我们可以看到下图:如果您注意到,实际上在该图中我们做了两件事:

  • 修改曲线的颜色以使比较更容易
  • 添加了图例框架,该框架介绍了哪种颜色代表什么。
    这使得图上的元数据非常易于阅读。

在Matplotlib中创建条形图

我们可以使用带有简单代码段的Matplotlib创建吸引人的条形图:

import matplotlib.pyplot as plt; plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
 
names = ('Tom', 'Dick', 'Harry', 'Jill', 'Meredith', 'George')
y_pos = np.arange(len(names))
speed = [8, 7, 12, 4, 3, 2]
 
plt.bar(y_pos, speed, align='center', alpha=0.5)
plt.xticks(y_pos, names)
plt.ylabel('Speed')
plt.title('Person')
 
plt.show()

在Matplotlib中创建饼图

我们可以使用Matplotlib通过简单的代码片段创建吸引人的饼图:

import matplotlib.pyplot as plt
 
# Data to plot
names = 'Tom', 'Dick', 'Harry', 'Jill', 'Meredith', 'George'
speed = [8, 7, 12, 4, 3, 2]
colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue', 'red', 'blue']
explode = (0.1, 0, 0, 0, 0, 0)  # explode 1st slice
 
# Plot
plt.pie(speed, explode=explode, labels=names, colors=colors,
      autopct='%1.1f%%', shadow=True, startangle=140)
 
plt.axis('equal')
plt.show()

运行此代码时,可以看到下图:查看如何提高饼图中的一个切片以将其与其余切片区分开!

在Matplotlib中创建热图

图表很酷,但是在可视化地理信息时,没有什么比热图更好的了:

import numpy as np
import numpy.random
import matplotlib.pyplot as plt
 
# Create data
temperature = np.random.randn(4096)
anger = np.random.randn(4096)
 
# Create heatmap
heatmap, xedges, yedges = np.histogram2d(temperature, anger, bins=(64,64))
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
 
# Plot heatmap
plt.clf()
plt.ylabel('Anger')
plt.xlabel('Temp')
plt.imshow(heatmap, extent=extent)
plt.show()