Python绘制精美可视化数据分析图表(一)-Matplotlib

简介: 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程.这一过程也是质量管理体系的支持过程.在实用中,数据分析可帮助人们作出判断,以便采取适当行动在DT时代,数据分析是企业做出重要决策的基础,巧妇难为无米之炊,数据就是米,是数据分析基础中的基础,但是没有经过整理的数据,或许杂乱无章,没有任何意义,通过数据分析相关手段处理之后,让数据变得有意义,特别是整理后的数据经过可视化,更加直观,更容易,快速地找到问题所在,更有利于做出正确的决策,不至于在市场经营中处于被动局面.所以数据可视化也是我们数据分析中最重要的工具,也是最重要的一环

前言


数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论而对数据加以详细研究和概括总结的过程.这一过程也是质量管理体系的支持过程.在实用中,数据分析可帮助人们作出判断,以便采取适当行动

在DT时代,数据分析是企业做出重要决策的基础,巧妇难为无米之炊,数据就是米,是数据分析基础中的基础,但是没有经过整理的数据,或许杂乱无章,没有任何意义,通过数据分析相关手段处理之后,让数据变得有意义,特别是整理后的数据经过可视化,更加直观,更容易,快速地找到问题所在,更有利于做出正确的决策,不至于在市场经营中处于被动局面.所以数据可视化也是我们数据分析中最重要的工具,也是最重要的一环

在Python有很多绘制图表相关的库,如:matplotlib,Chaco,Cairoplot,PLPlot,Pychart,reportlab,pyecharts等等.这么多库,这也是Python生态这么好的原因之一,拥有足够丰富的库,有很多人戏称:"Python除了不能生孩子啥否能做",哈哈哈~~.目前最火的可视化大屏很多都是基于这些图表库,其中matplotlib就是我们今天的主角.他是是python最著名的绘图库,它可与NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,它跟matlab一样简单,方便.而且也具有非凡的表现力


准备


安装

pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple

Linux 系统也可以使用 Linux 包管理器来安装:

  • Debian / Ubuntu:

sudo apt-get install python-matplotlib

  • Fedora / Redhat:

sudo yum install python-matplotlib


查看安装版本


安装完后,你可以使用 python -m pip list 命令来查看是否安装了 matplotlib 模块

windows系统:


pip3 list | grep matplotlib


网络异常,图片无法展示
|


其他系统可使用:

pip3 list | grep matplotlib


我这里是之前安装的,版本是3.2.2.目前最新版本是3.5.2

网络异常,图片无法展示
|

Matplotlib官网:https://matplotlib.org


使用体验

我们在日常的数据统计中,最常用的就是条形图,直方图,折线图,散点图,饼图.其中在这些图表的基础又衍生更多有利分析的图表,我们今天从基础图表的绘制学习matplotlib的使用.

初体验


导入库,按需导入


import matplotlib.pyplot as plt


绘制1-5的平方图表,函数:f(x) = x^2;


import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5],[1,4,9,16,25])
plt.show()


网络异常,图片无法展示
|


在上图中我们除了图表,在图表上面还有一个导航菜单


网络异常,图片无法展示
|


下面我们具体介绍一下:


网络异常,图片无法展示
|


做数据分析怎么能少得了数据.pandas是我们日常分析的利器之一,它是一个功能强大的Python数据分析模块.如果说数据是米,那他就是锅或者说是盛米的容器.下面使用pandas生成随机数结合matplotlib绘制图表:


importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltdata=pd.Series(np.random.rand(2000))
data.plot()
plt.show()


这是通过np.random.rand(2000)生成2000个随机数,放到pandas的Series中,然后matplotlib绘制图表


pandas的Series长这样,就类似一维数组


网络异常,图片无法展示
|


绘制的图表如下


网络异常,图片无法展示
|

常用图表绘制

折线图

importmatplotlib.pyplotaspltx1= [1,3,4]
y1= [3,4,1]
x2= [1,3,4]
y2= [4,1,6]
plt.plot(x1,y1,label='Line1')
plt.plot(x2,y2,label='Line2')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] =Falseplt.title("折线图")
plt.legend()
plt.show()


网络异常,图片无法展示
|


条形图

排列在工作表的列或行中的数据可以绘制到条形图中,条形图分为水平和垂直条形图


importmatplotlib.pyplotaspltx1= [1,3,5,7,9,11]
y1= [3,4,1,5,7,10]
x2= [2,4,6,8,10,11]
y2= [4,1,6,9,2,8]
plt.bar(x1,y1,label='折线1')
plt.bar(x2,y2,label='折线2')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] =Falseplt.title("条形图")
plt.legend()
plt.show()


plt.bar()为绘制条形图函数


网络异常,图片无法展示
|


直方图


直方图和条形图差不多,只是他们表述的内容不同,直方图的目的是为了研究产品质量的分布状况,据此可以判断生产过程是否处在正常状态。


importmatplotlib.pyplotaspltx1= [1,3,5,7,9,11,34,44,56,7,43,89,56,79,26,37,48,38,89,99,10,54,58,57,25,52,36,97,96,92,28,38,48,67,20,21,23,24,29,88,84,84,63]
y1= [0,10,20,30,40,50,60,70,80,90,100]
plt.hist(x1,y1,histtype="bar",rwidth=0.5)
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] =Falseplt.title("直方图")
plt.legend()
plt.show()


plt.hist(x1,y1,histtype="bar",rwidth=0.5)是绘制直方图关键函数,rwidth用来指定显示每个条的宽度,histtype是指定直方图显示的类型


网络异常,图片无法展示
|


散点图


importmatplotlib.pyplotaspltx= [1, 3, 5, 7, 9, 11]
y= [4, 6, 5, 8, 10, 3]
plt.scatter(x, y, label="散点", s=25, marker="o")
plt.xlabel('X轴')
plt.ylabel("Y轴")
#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] =Falseplt.title('散点图')
plt.legend()
plt.show()


plt.scatter(x, y, label="散点", s=25, marker="o")是绘制散点图的主要函数,s是用于设置显示散点大小,marker为散点在图中的表现形式:


"o":表示散点

",":表示像素(正方形)

"v":表示三角形

"x":表示符号x

"d":表示菱形

"*":表示五角星


网络异常,图片无法展示
|


饼图

饼图是部分对于整体所占的比例情况

仅排列在工作表的一列或一行中的数据可以绘制到饼图中。饼图显示一个数据系列 (数据系列:在图表中绘制的相关数据点,这些数据源自数据表的行或列。图表中的每个数据系列具有唯一的颜色或图案并且在图表的图例中表示。可以在图表中绘制一个或多个数据系列。饼图只有一个数据系列。)中各项的大小与各项总和的比例。饼图中的数据点 (数据点:在图表中绘制的单个值,这些值由条形、柱形、折线、饼图或圆环图的扇面、圆点和其他被称为数据标记的图形表示。相同颜色的数据标记组成一个数据系列。)显示为整个饼图的百分比。


importmatplotlib.pyplotaspltScore= [93, 89, 68, 96]
Subject= ['数学', '语文', '英语', '综合']
cols= ['c', 'm', 'r', 'b']
plt.pie(
Score,
labels=Subject,
colors=cols,
startangle=90,
shadow=False,
explode=(0.1, 0, 0, 0),
autopct='%1.1f%%')
#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] =Falseplt.title("饼图")
plt.show()


plt.pie()为绘制饼图函数


plt.pie(
Score, #数据labels=Subject,#标签colors=cols,#颜色startangle=90,#调整整个饼图的数据角度shadow=False,#是否带有阴影explode=(0.1, 0, 0, 0),#将制定部分拉出,本例是将数学拉出,0为不拉出autopct='%1.1f%%')#将百分比放到各部分


网络异常,图片无法展示
|


图像注释

importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltdata=pd.DataFrame(np.random.randn(1000, 2), columns=list("AB"))
print(data.head())
data.plot.scatter(x='A', y='B')
#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] =Falseplt.text(2, 2, 'A点')
plt.annotate('标注', xy=(-3,-2), xytext=(-2.5,-2.5), arrowprops=dict(facecolor='red')) #添加红色箭头指定标注点plt.grid(True)
plt.show()


plt.annotate('标注', xy=(-3,-2), xytext=(-2.5,-2.5), arrowprops=dict(facecolor='red')) #添加红色箭头指定标注点


网络异常,图片无法展示
|


子图

子图就是输出多种图表,可以理解为分域,每个区域都有自己独立执行的代码用于创建对应区域的图表,离我们平常所见的可视化大屏更近一步了


importmatplotlib.pyplotasplt#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] =Falsefig=plt.figure()
x= [1, 3, 5, 7, 9, 11, 15, 17]
y= [4, 1, 5, 7, 10, 6, 0, 18]
ax1=fig.add_subplot(2, 2, 1)
ax2=fig.add_subplot(2, 2, 2)
ax3=fig.add_subplot(2, 1, 2)
ax1.scatter(x, y)
ax1.set_title('散点图')
ax2.plot(x, y)
ax2.set_title('折线图')
ax3.bar(x, y)
ax3.set_title('条形图')
ax3.set_xlabel('X')
ax3.set_ylabel('Y')
ax3.annotate('first one', xy=(1,1), xytext=(2,2), arrowprops=dict(facecolor='r'))
plt.show()


就是多个图表的组合,在同一个面板展示


网络异常,图片无法展示
|


上面讲述的是2D图表,matplotlib还可以绘制3D图表如3D散点图:


3D图表


3D散点图


from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
#解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1, projection='3d')
x1 = [1,2,3,4,5,6,7,8,9,10]
y1 = [5,6,7,8,2,5,6,3,7,2]
z1= [-1,-2,-6,-3,-2,-7,-3,-3,-7,-2]
x2 = [-1,-3,-5,-7,-9,-11,-12,-15,-16,-17]
y2 = [4,1,5,7,10,5,12,8,9,13]
z2 = [1,2,6,3,2,7,3,3,7,4]
ax1.scatter(x1, y1, z1, color='b', marker='o')
ax1.scatter(x2, y2, z2, color='r', marker='x')
ax1.set_xlabel('x轴')
ax1.set_ylabel('y轴')
ax1.set_zlabel('z轴')
plt.show()


网络异常,图片无法展示
|


还有很多3D图表绘制功能等你发现~~后面也可能会续写一篇详细讲解matplotlib的3D绘制相关知识!敬请关注!


解决中文显示问题:指定字体

#解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
# 用来正常显示负号,解决负号乱码问题
plt.rcParams['axes.unicode_minus'] = False

Mac系统遇到中文乱码解决的方法:

第一步
进入python,找到matplotlib所在路径
>>> import matplotlib
>>> matplotlib.matplotlib_fname()
第二步
编辑 matplotlibrc 文件
(1)找到 #font.family:sans-serif ,将前面的'#'删除
(2)找到 #font.sana-serif: DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
在 "DejaVu Sans" 前面添加 "Arial Unicode MS,"
(3)找到axes.unicode_minus 将其后面的"True" 改为"False"
第三步
将~/.matplotlib目录下的两个文件删除
在命令终端输入:
rm -rf ~/.matplotlib/*
重启python,即可解决中文及"-"(负号)无法正常显示的问题。


总结


绘制数据图表作为数据直观的展示方式,是我们数据分析中不可或缺的工具,也是我们迅速做出决策的基础,学会使用它或许对于我们的工作能起到事半功倍的效果

matplotlib作为封装好的第三图表库,使用简单,方便,基本步骤大致就是:准备数据,整合处理数据,把数据放到matplotlib调用相关函数生成图表,继续深入学习,你就是数据分析小能手...


目录
相关文章
|
6天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析和可视化
【10月更文挑战第42天】本文将介绍如何使用Python进行数据分析和可视化。我们将从数据导入、清洗、探索性分析、建模预测,以及结果的可视化展示等方面展开讲解。通过这篇文章,你将了解到Python在数据处理和分析中的强大功能,以及如何利用这些工具来提升你的工作效率。
|
15天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
34 2
|
4天前
|
数据采集 数据可视化 数据挖掘
掌握Python数据分析,解锁数据驱动的决策能力
掌握Python数据分析,解锁数据驱动的决策能力
|
12天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
12天前
|
数据采集 数据可视化 数据挖掘
利用Python进行数据分析:Pandas库实战指南
利用Python进行数据分析:Pandas库实战指南
|
14天前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
83 2
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
185 4
|
3月前
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
87 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
数据分析之旅:用Python探索世界
数据分析之旅:用Python探索世界
29 2

热门文章

最新文章