数据经过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的个数一致