파이썬 데이터 시각화 입문 4 - Matplotlib 다루기

힘센캥거루
2023년 11월 13일(수정됨)
7
python

这是继 Pandas 之后的文章。请参阅附在前面的文章。

当我尝试使用 Python 进行数据可视化时,最难入门的库就是 matplotlib。

资料很多,但不知道具体该如何掌握。

本文将从Matplotlib 的基本用法开始,到详细的坐标轴设置,进行循序渐进的介绍。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-1

1. 调用 Matplotlib 和设置韩文

下面的图表是利用之前文章中的数据进行可视化的。

可以看到韩文全部显示为□的形状

这是因为matplotlib 不支持韩文字体

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-2

如果想使用韩文字体,请直接复制、粘贴下面的代码

字体设置为我最喜欢的字体:Malgun Gothic

# 调用模块并设置韩文字体
import matplotlib.pyplot as plt
import matplotlib

# 在 MacOS 上设置字体
# matplotlib.rcParams["font.family"] = "AppleGothic"

# 在 Windows 上设置字体
matplotlib.rcParams["font.family"] = "Malgun Gothic"

# 设置字体大小
matplotlib.rcParams["font.size"] = 13

# 解决负号显示问题
plt.rcParams['axes.unicode_minus'] = False

如上文所述,这些内容并不是为了记住。

只需知道有这样的方法可以解决即可。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-3

运行上述代码后绘制图表,可以看到如下图所示韩文显示正常

我们将在下次尝试绘制相似的图表。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-4

2. 画直线图(plot)

在各种图表中,最容易画的是直线图

如果能画直线图,其他图表也可以轻松绘制。

比起装饰图表,我将重点放在先试着画图

1) 画图

先来画一个y=x 形式的一次函数。将x 值y 值放入如下列表中。

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

然后按如下方式直接用作参数。

plt.plot(x, y)

这样可以看到如下输出。

原本需要通过plt.show()来显示图表。

但在Jupyter Notebook中,可以直接查看结果。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-5

这样就利用x 值和 y 值画了图

在 plt.plot() 中将 x, y 值以列表形式作为参数,即可画图。

也支持 DataFrame

但是只用这些还不够,我们来尝试学习一些功能。

2) 设置图例

向图表中再添加一个值。

拖动先前输入的 x, y 值,然后按 Alt + Shift + ↓(箭头)即可复制值

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-6

虽然可以一一更改为 x1, y1,但不是很优雅。

让我们用一种简单的方法输入,如下。

x1 = x.copy()
x1.reverse()
y1 = y.copy()
plt.plot(x1,y1)
파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-7

这样画图时,可以看到两条直线显示为不同颜色

要想更明确,可以设置图例。

在每个plt.plot() 内部增加 label 参数

x = [1,2,3,4,5]
y = [1,2,3,4,5]
x1 = x.copy()
x1.reverse()
y1 = y.copy()
plt.plot(x,y,label="A")
plt.plot(x1,y1,label="B")
plt.legend()

可以看到右侧显示图例

图例的位置可以自由调整,不过,我们稍后再进行深入学习。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-8

3) 设置标题

设置标题非常简单,只需要在plt.title() 中以字符串形式给定参数

plt.title("我的漂亮图表")

这样输入时,上方会显示标题。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-9

通过 fontsize 参数可以更改字体大小

plt.title("我的漂亮图表", fontsize=25)

可以确认到标题字体的大小有所增加。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-10

4) 设置轴名称

接下来,让我们表达 x 轴和 y 轴的含义。可以通过较为简单的代码进行输入。

plt.xlabel("设置 x 轴名称", fontsize=25)
plt.ylabel("设置 y 轴名称", fontsize=25)

与 title 一样,xlabel 和 ylabel 也可以通过 fontsize 参数来调整。

如果不输入,则采用默认字体大小

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-11

5) 设置轴间距

轴间距为 0.5 有些不便。修改下轴间距

plt.xticks(x)
plt.yticks(y)

在 xticks 或 yticks 里,以列表形式输入想要的值

现在设置的是 1~5 的值,但也可以更小

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-12

此外,还可以更改轴值范围本身

现在将x 轴间距设置为 [1,3,5],并更改为字符串 ["a", "b", "c"]

# plt.xticks("축 값의 간격 및 범위", ["变更的值"])
# y 值更改为 yticks,使用方法相同。

plt.xticks([1,3,5], ["a", "b", "c"])
plt.yticks(y)

输入该代码后,能看到 x 轴的值已更改。

xticks 和 yticks 的第一个参数是要更改的轴间隔,第二个参数是相应的值

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-13

顺便也

plt.xticks([1,3,5], ["a", "b", "c"])
plt.yticks(y,["铁", "铜", "银", "金", "铂"))

可以看到值已成功更改。

注意,轴间隔和要更改的值的个数需要相同

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-14

6) 指定线样式

线样式也可以更改。

plt.plot() 中输入 color、marker、linestyle 等参数。

plt.plot(x,y,
         label="A",
         marker = "^", # 标记
         color="darkred", # 线颜色
         linestyle=":" # 线形
         )

如果只更改两条图中的一条,能够看到下图中出现的图表。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-15

以这种方式输入虽然明确,但记住所有参数比较困难

可以用更简单的方式输入。

# 线样式更改 1
plt.plot(x,y,
         label="A",
         marker = "^",
         color="darkred",
         linestyle=":")
         
# 线样式更改 2 
plt.plot(x1,y1,"go:",label="B")

x 和 y 值后以字符串形式附加颜色、标记和线样式

这样表达起来更简单。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-16

以下是 matplotlib 支持的颜色、标记、线样式种类

希望选择你喜欢的。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-17파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-18

3. 绘制各种图表

这次试试除 plot 之外的其他图表。

只是参数略有不同,但都需要输入 x 和 y 值

1) 柱状图(bar)

首先,在单个图中删除除x、y 值和 label 外的所有参数

然后将plt.plot 替换为 plt.bar。

plt.bar(x,y,label="A")

只需简单地将 plot 替换,即会画出图表。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-19

由于图表重叠得太多不太舒适,因此向 bar 添加 alpha 值来调整透明度。

plt.bar(x,y,label="A",alpha=0.4)

这样看,可以看到原有的值更改为柱状图。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-20

色彩和宽度也可以像 plot 那样指定。

plt.bar(x,y,label="A",alpha=0.4,color="red")
plt.bar(x,y,label="C, width=0.4",alpha=0.4,width=0.4,color="yellow")
파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-21

2) 水平柱状图(barh)

这次画水平图。

只需在之前的plt.bar 后加上一个 h 变为 plt.barh 即可

plt.barh(x,y,label="A", alpha=0.4, color="red")

可以看到下图中图表已更改。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-22

B 图表也转换为水平图,并增加了alpha 值

同时将 x, y 值还原至原值

plt.barh(x,y,label="A",alpha=0.4,color="red")
plt.barh(x1,y1,label="B",alpha=0.4,color="green")
파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-23

如果不喜欢重复,可以对一个图表的 y 值乘以负号,左右展开也可以。

y1 = y.copy()
y1 = [-i for i in y1]
plt.barh(x,y,label="A",alpha=0.4,color="red")
plt.barh(x1,y1,label="B",alpha=0.4,color="green")

可以看到下图显示了类似出生率的图表。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-24

如果会用 numpy,可以用 numpy.array 明显简化的方式来反转值。结果与上面相同。

y1 = y.copy()
y1 = np.array(y1)
plt.barh(x,y,label="A",alpha=0.4,color="red")
plt.barh(x1,-y1,label="B",alpha=0.4,color="green")

3) 散点图(scatter)

现在画散点图

之前 barh 删除并输入 scatterB 图表的 y 值也还原。

plt.scatter(x,y,label="A",alpha=0.4,color="red")
plt.barh(x1,y1,label="B",alpha=0.4,color="green")

散点图简单地以点形式显示值的位置。

在查看值的分布或相关性时很有用。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-25

4) 直方图(hist)

直方图显示值的分布。

我们设置的 1~5 间的值都相同,因此绘制直方图时只会出现直线。

使用内置函数 random添加随机值

也提供了numpy 使用示例

# 使用内置函数
import random
y2 = [random.randint(0,101) for i in range(100)]
plt.hist(y2, alpha=0.4)

# 使用 numpy
import numpy as np
y3 = np.random.randint(0, 101, 100) # (起始数,结束数,长度)顺序输入
plt.hist(y3, alpha=0.4)

如下所示,显示了每个范围内有多少值

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-26

可以指定要估计的值范围及图表宽度。

bins(值范围)设为 10,将宽度设为 15

import random
y2 = [random.randint(0,101) for i in range(100)]
plt.hist(y2,label="a",alpha=0.4)

import numpy as np
y3 = np.random.randint(0,101, 100)
plt.hist(y3,label="b, bins=5",alpha=0.4,bins=5,width=15)

plt.legend()
파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-27

5) 箱线图(boxplot)

接下来是箱线图

虽然看起来很陌生,但从上到下显示了最大值、上四分位数、中位数、下四分位数和最小值

将上面的y2, y3 输入一个箱线图中试试。

import random
y2 = [random.randint(0,101) for i in range(100)]

import numpy as np
y3 = np.random.randint(0,101, 100)

plt.boxplot([y2,y3], labels=["y2","y3"])

以列表形式输入想要的值即可同时显示

也可以通过将 labels 参数以列表形式输入来表示每个值。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-28

也支持颜色,但需要单独处理每个对象,不多赘述。

如果想深入了解,很容易找到相关资料。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-29

6) 小提琴图(violinplot)

小提琴图与箱线图不同,以一种

import random
y2 = [random.randint(0,101) for i in range(100)]

import numpy as np
y3 = np.random.randint(0,101, 100)

plt.violinplot([y2,y3])

小提琴图。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-30

如果想查看中位数25% 分位数,可以如下面代码所述进行添加。

plt.violinplot([y2,y3], showmeans=True, quantiles=[[0.25,0.75],[0.25,0.75]])

showmeans 显示中位数quantiles以小数点形式输入需显示的分位

比箱线图更详尽,更易懂。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-31

看图表后稍觉不适,

plt.violinplot([y2,y3], showmeans=True, quantiles=[[0.25,0.75],[0.25,0.75]])
plt.xticks([1,2], ["y2","y3"])

稍微舒适些。

파이썬 데이터 시각화 입문 4 - Matplotlib 다루기-32

4. 结束语

本篇文章仅是用 Matplotlib 进行初步可视化。实际上,只需简单地为 x 值和 y 值赋值,就能绘制图表。

其他的坐标轴设置、旋转等都是附加的。

尝试从头记住所有事物只会妨碍学习进程

边制作,边解决问题,逐步掌握即可。

下文将探讨使用 Matplotlib 可视化 Pandas 中的数据

댓글을 불러오는 중...