手机网站有什么区别,o2o模式的特点,做外文H网站,怎么查看网站是否降权Python 数据分析 - Matplotlib 绘图 简介绘图折线图单线多线子图 散点图直方图条形图纵置横置多条 饼图 简介
Matplotlib 是 Python 提供的一个绘图库#xff0c;通过该库我们可以很容易的绘制出折线图、直方图、散点图、饼图等丰富的统计图#xff0c;安装使用 pip install… Python 数据分析 - Matplotlib 绘图 简介绘图折线图单线多线子图 散点图直方图条形图纵置横置多条 饼图 简介
Matplotlib 是 Python 提供的一个绘图库通过该库我们可以很容易的绘制出折线图、直方图、散点图、饼图等丰富的统计图安装使用 pip install matplotlib 命令即可Matplotlib 经常会与 NumPy 一起使用。
在进行数据分析时可视化工作是一个十分重要的环节数据可视化可以让我们更加直观、清晰的了解数据Matplotlib 就是一种可视化实现方式。
绘图
下面我们来学习一下如何使用 Matplotlib 绘制常用统计图。
折线图
折线图可以显示随某一指标变化的连续数据。
单线
首先我们来看一下如何使用 Matplotlib 绘制一个简单的折线图具体实现如下
# import matplotlib.pyplot as plt
from matplotlib import pyplot as plt# 设置中文字体为黑体
plt.rcParams[font.sans-serif] [SimHei]
# 解决负号显示问题
plt.rcParams[axes.unicode_minus] False
x range(1, 7)
y [13, 15, 14, 16, 15, 17]
plt.title(折线图)
plt.xlabel(x 轴)
plt.ylabel(y 轴)
plt.plot(x, y, markero, linestyle-, colorb, label数据系列)
plt.show()我们在使用中文时可能会现乱码的问题可以通过如下方式解决
plt.rcParams[font.sans-serif] [SimHei]我们还可以改变折线的样式、颜色等通过示例来看一下。
from matplotlib import pyplot as pltx range(1, 7)
y [13, 15, 14, 16, 15, 17]figsize设置图片的宽、高单位为英寸
dpi设置分辨率plt.figure(figsize(8, 5), dpi80)
plt.title(折线图)
plt.xlabel(x 轴)
plt.ylabel(y 轴)color颜色
linewidth线的宽度
marker折点样式
linestyle线的样式主要包括-、--、-.、:plt.plot(x, y, colorred, markero, linewidth1, linestyle--)
# 保存
# plt.savefig(test.png)
plt.show()看一下效果
多线
有时候我们可能存在多个指标对比的情况也就是需要在一个图中绘制多条折线比如我们要了解张三、李四随着年龄增长体重的变化情况示例如下所示
from matplotlib import pyplot as pltplt.rcParams[font.sans-serif] [SimHei]x range(15, 25)
y1 [50, 55, 58, 65, 70, 68, 70, 72, 75, 70]
y2 [52, 53, 60, 63, 65, 68, 75, 80, 85, 72]
plt.figure(figsize(10, 6), dpi80)
plt.title(体重年龄折线图)
plt.xlabel(年龄岁)
plt.ylabel(体重kg)
plt.plot(x, y1, colorred, label张三)
plt.plot(x, y2, colorblue, label李四)
# 添加网格alpha 为透明度
plt.grid(alpha0.5)
# 添加图例
plt.legend(locupper right)
plt.show()看一下效果
子图
Matplotlib 可以实现在一张图中绘制多个子图我们通过示例来看一下。
from matplotlib import pyplot as pltimport numpy as npa np.arange(1, 30)
# 划分子图
fig, axs plt.subplots(2, 2)
# 绘制子图
axs1 axs[0, 0]
axs2 axs[0, 1]
axs3 axs[1, 0]
axs4 axs[1, 1]
axs1.plot(a, a)
axs2.plot(a, np.sin(a))
axs3.plot(a, np.log(a))
axs4.plot(a, a ** 2)
plt.show()看一下效果
散点图
散点图表示因变量随自变量而变化的大致趋势我们通过示例来具体看一下如何绘制散点图。
from matplotlib import pyplot as plt
import numpy as npx np.arange(0, 20)
# 生成随机数
y np.random.randint(0, 20, size20)
plt.title(散点图)
plt.xlabel(x 轴)
plt.ylabel(y 轴)
plt.plot(x, y, ob)
plt.show()看一下效果 直方图
直方图也被称为质量分布图主要用来表示数据的分布情况我们通过示例来看一下如何绘制直方图。
from matplotlib import pyplot as plt
import numpy as npplt.rcParams[font.sans-serif] [SimHei]
# 解决负号显示问题
plt.rcParams[axes.unicode_minus] False# 生成随机数
d1 np.random.randn(5000)
d2 np.random.randn(4000)bins直方图条目数
alpha透明度
label图例名plt.hist(d1, bins50, label label1, alpha0.8)
plt.hist(d2, bins50, label label2, alpha0.5)
plt.grid(alpha0.3)
plt.title(直方图)
plt.xlabel(x 轴)
plt.ylabel(y 轴)
# 显示图例
plt.legend()
plt.show()看一下效果
条形图
条形图宽度相同用高度或长短来表示数据多少它可以横置或纵置。
纵置
首先我们来看一下如何绘制纵向条形图以学生成绩为例看一下具体实现。
from matplotlib import pyplot as plt
import numpy as npplt.rcParams[font.sans-serif] [SimHei]
# 解决负号显示问题
plt.rcParams[axes.unicode_minus] Falsearr np.arange(4)
x [张三, 李四, 王五, 赵六]
y [77, 79, 70, 70]width长条形宽度
label图例名rects plt.bar(arr, y, width0.3, label语文)参数1中点坐标
参数2显示值plt.xticks([idx for idx in range(len(x))], x)
plt.title(学生成绩条形图)
plt.xlabel(姓名)
plt.ylabel(成绩)
plt.legend()
# 在条形图上加标注
for rect in rects:height rect.get_height()plt.text(rect.get_x() rect.get_width() / 2, height, str(height), hacenter, vabottom)
plt.show()看一下效果
横置
我们接着再通过示例来看一下如何绘制横向条形图。
from matplotlib import pyplot as plt
import numpy as npplt.rcParams[font.sans-serif] [SimHei]
# 解决负号显示问题
plt.rcParams[axes.unicode_minus] Falsearr np.arange(4)
y [张三, 李四, 王五, 赵六]
x [88, 79, 70, 66]
plt.barh(range(4), x, 0.4, label语文)
plt.yticks(range(4), y)
plt.xlabel(成绩)
plt.ylabel(姓名)
plt.title(学生成绩条形图)
plt.legend(locupper right)
for x, y in enumerate(x):plt.text(y 0.2, x - 0.1, %s % y)
plt.show()看一下效果 多条
最后我们来看一下一个学生要同时显示语文和数学两门成绩时如何通过 Matplotlib 来绘制条形图。
import matplotlib.pyplot as plt
import numpy as nparr np.arange(4)
x [张三, 李四, 王五, 赵六]
y1 [88, 75, 77, 66]
y2 [77, 79, 70, 70]width长条形宽度
label图例名rects1 plt.bar(arr, y1, width0.3, label语文)
rects2 plt.bar(arr 0.3, y2, width0.3, label数学)参数1中点坐标
参数2显示值
参数3间距plt.xticks([idx 0.15 for idx in range(len(x))], x, rotation10)
plt.title(学生成绩条形图)
plt.xlabel(姓名)
plt.ylabel(成绩)
plt.legend()
# 编辑文本
for rect in rects1:height rect.get_height()plt.text(rect.get_x() rect.get_width() / 2, height, str(height), hacenter, vabottom)
for rect in rects2:height rect.get_height()plt.text(rect.get_x() rect.get_width() / 2, height, str(height), hacenter, vabottom)
plt.show()看一下效果 饼图
饼图显示一个数据系列我们通过示例来看一下如何绘制饼图。
from matplotlib import pyplot as plt
import numpy as npplt.rcParams[font.sans-serif] [SimHei]
# 解决负号显示问题
plt.rcParams[axes.unicode_minus] Falselabel_list [第一部分, 第二部分, 第三部分]
size [50, 30, 20]
# 各部分颜色
color [red, green, blue]
# 各部分突出值
explode [0, 0.1, 0]explode设置各部分突出
label设置图例显示内容
labeldistance设置图例内容距圆心位置
autopct设置圆里面文本
shadow设置是否有阴影
startangle起始角度默认从 0 开始逆时针转
pctdistance设置圆内文本距圆心距离
l_text圆内部文本
p_text圆外部文本patches, l_text, p_text plt.pie(size, explodeexplode, colorscolor, labelslabel_list, labeldistance1.1, autopct%1.1f%%, shadowFalse, startangle90, pctdistance0.6)
# 设置横轴和纵轴大小相等这样饼才是圆的
plt.axis(equal)
plt.legend(locupper left)
plt.show()看一下效果