数据可视化:认识Matplotlib

Python
232
0
0
2024-01-05
标签   Python库

数据经过NumPy和Pandas的计算,最终得到了我们想要的数据结论,但是这些数据结论并不直观,所以想要把数据分析的结论做到可视化,让任何其他人看起来毫无压力,那么Matplotlib将派上用场。

Matplotlib简介

Matplotlib是一个Python全面的绘图库,用于创建静态、动画和交互式可视化。通过 Matplotlib,我们可以仅需要写几行代码,就可以生成绘图,直方图,功率谱,条形图,错误图,散点图等,方便数据展示。

Matplotlib的官网地址为https://matplotlib.org/,这里有权威的官网资料,同样与numpy和pandas一样,文档是英文的表达,对读者有一定的能力要求。

折线图

import matplotlib.pyplot as plt
import numpy as np
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
#x轴生成一个ndarray
x = np.arange(1, 11)
# y轴等于2x
y = 2 * x
#设置作图标题
plt.title("y=2x的坐标图")
#设置x轴标签
plt.xlabel("x轴")
#设置y轴标签
plt.ylabel("y轴")
#绘制折线图
plt.plot(x, y)
#将折线图显示
plt.show()

代码运行结果会生成y=2x的坐标图,如图所示。如果不设置plt的rcParams的参数值,那么生成的图片中将无法正常显示中文。

绘制折线图方法plt.plot(x,y,format_string,**kwargs)

x:x轴数据,列表或数组,可选

y:y轴数据,列表或数组

format_string:控制曲线的格式字符串,可选,由颜色字符、风格字符和标记字符组成。

**kwargs:表示可选多个

常用的控制曲线格式的字符串如下几种:

color:控制颜色,color=’g’

linestyle:线条风格,简写ls,例如ls='-'。'--'表示长虚线

marker:标记风格,例如marker = 'o',

markerfacecolor:标记颜色,简写用mfc,例如mfc= 'red'

markersize:标记尺寸,简写用ms,例如ms= 10

下面使用上面的自定义参数制作一个个性化的图表:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
x = np.arange(1, 11)
y = 2 * x
plt.title("y=2x的坐标图")
plt.xlabel("x轴")
plt.ylabel("y轴")
#个性化制作曲线
plt.plot(x, y, color='r', ls='--', marker='o', mfc='blue', ms=10)
plt.show()

代码运行结果如图所示

常用的颜色字符的简写如表所示,基本上可以用颜色英文单词的首字母。如果需要更多颜色,也支持使用16进制的RGB色彩模式。

颜色

简写字符

红色

r

绿色

g

蓝色

b

黄色

y

黑色

k

白色

w

常用风格字符

风格

字符

实线

-

长虚线

--

短虚线

:

点划线

-.

常见的标记字符

标记说明

字符

点标记

.

实心圆

o

十字标记

+

五星

*

x标记

x

菱形标记

D

方形标记

s

五角标记

p

散点图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
x = [1, 2, 3, 4, 5]
y = [2, 3, 7, 8, 4]
plt.title("散点图")
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.scatter(x, y, color='r', marker='*')
plt.show()

代码运行结果会生成x轴和y轴指定点的坐标图,如图所示。scatter ()函数中的color表示颜色,marker表示点的形状,与plot的值通用。

直方图

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号
# 生成正态分布的10000个随机数
data = np.random.randn(10000)
plt.hist(data, bins=50, fc="b", ec="w")
# 设置x轴标签
plt.xlabel("区间")
# 设置y轴标签
plt.ylabel("频数")
# 设置图标题
plt.title("正态分布直方图")
plt.show()

代码运行结果如图所示。randn()函数的作用就是从标准正态分布中返回一个或多个样本值。标准正态分布俗称高斯分布,正态分布是大自然中最常见的分布,标准正态分布就是期望为0,方差为1的正态分布。

在hist()方法中参数含义如下:

data:必选参数,绘图数据

bins:直方图的长条形数目,默认为10,为了更加明显地看出正态分布,可以设置大一些。

fc:全写为facecolor,长条形的颜色

ec:全写为edgecolor,长条形边框的颜色

条形图

在之前的小节中得到了高分电影上映年份的TOP,现在我们就将此数据做成可视化的条形图。

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('movie.xlsx')
# 统计每年上映的电影数的前十年份
series = df['上映年份'].value_counts()[:10]
# 格式化年份数据 int转成str 获得横(x)坐标数据
x = []
for i in series.index.tolist():
x.append(str(i))
#获得纵(y)坐标数据
y = series.values.tolist()
ax = plt.bar(x, y, width=0.4)
# 添加横坐标显示
plt.xticks(x, x)
# 在每个条形图上方显示数值
for a, b in zip(x, y):
plt.text(a, b + 0.1, '%.0f' % b, ha='center', va='bottom', fontsize=10)
#设置横纵坐标标签
plt.xlabel('上映年份')
plt.ylabel('上映数量')
plt.title('高评分电影上映年代TOP10')
plt.show()

代码运行结果如图所示,得到这个可视化的图表后,在简单意义上已经完成了一个简单的数据获取、分析以及可视化的过程。

条形图绘制函数bar(),基本用法如下:

bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

x: 横坐标(序列)

height:纵坐标(系列)

width:条形图的宽度,默认是0.8,可以根据实际大小设置,以更加美观

bottom:用于绘制堆叠条形图,默认值为None

align:x轴刻度标签的对齐方式,包括:'center','edge',默认是'center'

饼图

import pandas as pd
import matplotlib.pyplot as plt


plt.rcParams['font.sans-serif'] = ['SimHei']
df = pd.read_excel('movie.xlsx')
# 统计每年上映的电影数的前十年份
series = df['制片国家/地区'].value_counts()[:10]
label_list = series.index.tolist()  # 各部分标签
size = []  # 各部分大小
last = 250
for i in series.values:
last = last - i
size.append(i / 250)
# 显示前10个国家名称,补充剩余国家
label_list.append("其他国家")
size.append(last / 250)
#设置画布大小
plt.figure(figsize=(8, 8))
# 设置各部分颜色
color = ["r", "g", "b", "y", "tomato", "skyblue", "sandybrown", "hotpink", "lightcoral", "mediumturquoise",
"paleturquoise"]
# 画图
plt.pie(size, colors=color, labels=label_list, labeldistance=1.1,
autopct="%1.1f%%", shadow=True, startangle=90)
# 设置横轴和纵轴大小相等,这样饼才是圆的
plt.axis("equal")
plt.title("高评分电影制片国家分布占比图")
plt.legend()
plt.show()

代码运行结果如图所示。

pie()方法用来绘制饼图, pie的参数有很多,如下所列出:

pie(x, explode=None, labels=None, colors=None, autopct=None,
pctdistance=0.6, shadow=False, labeldistance=1.1,
startangle=None, radius=None, counterclock=True,
wedgeprops=None, textprops=None, center=(0, 0), frame=False,
rotatelabels=False, *, data=None)

pie方法常用的参数有以下几个:

x:饼图百分比数据

labels:设置饼图中各个部分的标签

autopct:设置百分比信息的字符串格式化方式,默认值为None,不显示百分比

shadow:设置饼图的阴影,使得看上去有立体感,默认值为False

startangle:设置饼图中第一个部分的起始角度

radius:设置饼图的半径,数值越大,饼图越大

counterclock:设置饼图的方向,默认为True,表示逆时针方向,值为False时为顺时针方向

colors:颜色设置,默认值为None, 会使用默认的调色盘,所以通常情况下,不需要设置该参数。但是调色盘会有10个颜色,上图例子中有11个部分,这样造成了首位颜色一样,不好区分,所以设置自定义11个颜色的调色盘

explode:设置突出显示饼图中的指定部分,参数值需要与x的个数一致