这是继 Pandas 之后的文章。请参阅附在前面的文章。
当我尝试使用 Python 进行数据可视化时,最难入门的库就是 matplotlib。
资料很多,但不知道具体该如何掌握。
本文将从Matplotlib 的基本用法开始,到详细的坐标轴设置,进行循序渐进的介绍。

1. 调用 Matplotlib 和设置韩文
下面的图表是利用之前文章中的数据进行可视化的。
可以看到韩文全部显示为□的形状。
这是因为matplotlib 不支持韩文字体。

如果想使用韩文字体,请直接复制、粘贴下面的代码。
字体设置为我最喜欢的字体: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如上文所述,这些内容并不是为了记住。
只需知道有这样的方法可以解决即可。

运行上述代码后绘制图表,可以看到如下图所示韩文显示正常。
我们将在下次尝试绘制相似的图表。

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中,可以直接查看结果。

这样就利用x 值和 y 值画了图。
在 plt.plot() 中将 x, y 值以列表形式作为参数,即可画图。
也支持 DataFrame。
但是只用这些还不够,我们来尝试学习一些功能。
2) 设置图例
向图表中再添加一个值。
拖动先前输入的 x, y 值,然后按 Alt + Shift + ↓(箭头)即可复制值。

虽然可以一一更改为 x1, y1,但不是很优雅。
让我们用一种简单的方法输入,如下。
x1 = x.copy()
x1.reverse()
y1 = y.copy()
plt.plot(x1,y1)
这样画图时,可以看到两条直线显示为不同颜色。
要想更明确,可以设置图例。
在每个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()可以看到右侧显示图例。
图例的位置可以自由调整,不过,我们稍后再进行深入学习。

3) 设置标题
设置标题非常简单,只需要在plt.title() 中以字符串形式给定参数。
plt.title("我的漂亮图表")这样输入时,上方会显示标题。

通过 fontsize 参数可以更改字体大小。
plt.title("我的漂亮图表", fontsize=25)可以确认到标题字体的大小有所增加。

4) 设置轴名称
接下来,让我们表达 x 轴和 y 轴的含义。可以通过较为简单的代码进行输入。
plt.xlabel("设置 x 轴名称", fontsize=25)
plt.ylabel("设置 y 轴名称", fontsize=25)与 title 一样,xlabel 和 ylabel 也可以通过 fontsize 参数来调整。
如果不输入,则采用默认字体大小。

5) 设置轴间距
轴间距为 0.5 有些不便。修改下轴间距。
plt.xticks(x)
plt.yticks(y)在 xticks 或 yticks 里,以列表形式输入想要的值。
现在设置的是 1~5 的值,但也可以更小。

此外,还可以更改轴值范围本身。
现在将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 的第一个参数是要更改的轴间隔,第二个参数是相应的值。

顺便也
plt.xticks([1,3,5], ["a", "b", "c"])
plt.yticks(y,["铁", "铜", "银", "金", "铂"))可以看到值已成功更改。
注意,轴间隔和要更改的值的个数需要相同。

6) 指定线样式
线样式也可以更改。
在 plt.plot() 中输入 color、marker、linestyle 等参数。
plt.plot(x,y,
label="A",
marker = "^", # 标记
color="darkred", # 线颜色
linestyle=":" # 线形
)如果只更改两条图中的一条,能够看到下图中出现的图表。

以这种方式输入虽然明确,但记住所有参数比较困难。
可以用更简单的方式输入。
# 线样式更改 1
plt.plot(x,y,
label="A",
marker = "^",
color="darkred",
linestyle=":")
# 线样式更改 2
plt.plot(x1,y1,"go:",label="B")在x 和 y 值后以字符串形式附加颜色、标记和线样式。
这样表达起来更简单。

以下是 matplotlib 支持的颜色、标记、线样式种类。
希望选择你喜欢的。


3. 绘制各种图表
这次试试除 plot 之外的其他图表。
只是参数略有不同,但都需要输入 x 和 y 值。
1) 柱状图(bar)
首先,在单个图中删除除x、y 值和 label 外的所有参数。
然后将plt.plot 替换为 plt.bar。
plt.bar(x,y,label="A")只需简单地将 plot 替换,即会画出图表。

由于图表重叠得太多不太舒适,因此向 bar 添加 alpha 值来调整透明度。
plt.bar(x,y,label="A",alpha=0.4)这样看,可以看到原有的值更改为柱状图。

色彩和宽度也可以像 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")
2) 水平柱状图(barh)
这次画水平图。
只需在之前的plt.bar 后加上一个 h 变为 plt.barh 即可。
plt.barh(x,y,label="A", alpha=0.4, color="red")可以看到下图中图表已更改。

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")
如果不喜欢重复,可以对一个图表的 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")可以看到下图显示了类似出生率的图表。

如果会用 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 删除并输入 scatter。B 图表的 y 值也还原。
plt.scatter(x,y,label="A",alpha=0.4,color="red")
plt.barh(x1,y1,label="B",alpha=0.4,color="green")散点图简单地以点形式显示值的位置。
在查看值的分布或相关性时很有用。

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)如下所示,显示了每个范围内有多少值。

可以指定要估计的值范围及图表宽度。
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()
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 参数以列表形式输入来表示每个值。

也支持颜色,但需要单独处理每个对象,不多赘述。
如果想深入了解,很容易找到相关资料。

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])小提琴图。

如果想查看中位数和25% 分位数,可以如下面代码所述进行添加。
plt.violinplot([y2,y3], showmeans=True, quantiles=[[0.25,0.75],[0.25,0.75]])showmeans 显示中位数,quantiles以小数点形式输入需显示的分位。
比箱线图更详尽,更易懂。

看图表后稍觉不适,
plt.violinplot([y2,y3], showmeans=True, quantiles=[[0.25,0.75],[0.25,0.75]])
plt.xticks([1,2], ["y2","y3"])稍微舒适些。

4. 结束语
本篇文章仅是用 Matplotlib 进行初步可视化。实际上,只需简单地为 x 值和 y 值赋值,就能绘制图表。
其他的坐标轴设置、旋转等都是附加的。
尝试从头记住所有事物只会妨碍学习进程。
边制作,边解决问题,逐步掌握即可。
下文将探讨使用 Matplotlib 可视化 Pandas 中的数据。
댓글을 불러오는 중...