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调用相关函数生成图表,继续深入学习,你就是数据分析小能手...


目录
相关文章
|
8天前
|
Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
11天前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
26 1
|
6天前
|
数据可视化 Python
Python数据可视化-动态柱状图可视化
Python数据可视化-动态柱状图可视化
|
11天前
|
存储 数据可视化 数据挖掘
揭秘!Matplotlib与Seaborn联手,如何让Python数据分析结果一目了然,惊艳全场?
在数据驱动时代,高效直观地展示分析结果至关重要。Python中的Matplotlib与Seaborn是两大可视化工具,结合使用可生成美观且具洞察力的图表。本文通过分析某电商平台的商品销量数据集,展示了如何利用这两个库揭示商品类别与月份间的销售关系及价格对销量的影响。首先使用Matplotlib绘制月份销量分布直方图,再借助Seaborn的箱线图进一步探索不同类别和价格区间下的销量稳定性。
39 10
|
6天前
|
JSON 数据可视化 数据处理
Python数据可视化-折线图可视化
Python数据可视化-折线图可视化
|
11天前
|
机器学习/深度学习 数据可视化 数据挖掘
数据可视化大不同!Python数据分析与机器学习中的Matplotlib、Seaborn应用新视角!
在数据科学与机器学习领域,数据可视化是理解数据和优化模型的关键。Python凭借其强大的可视化库Matplotlib和Seaborn成为首选语言。本文通过分析一份包含房屋面积、卧室数量等特征及售价的数据集,展示了如何使用Matplotlib绘制散点图,揭示房屋面积与售价的正相关关系;并利用Seaborn的pairplot探索多变量间的关系。在机器学习建模阶段,通过随机森林模型展示特征重要性的可视化,帮助优化模型。这两个库在数据分析与建模中展现出广泛的应用价值。
27 2
|
24天前
|
数据可视化 Python
Python中的数据可视化:使用Matplotlib绘制图表
【9月更文挑战第11天】在这篇文章中,我们将探索如何使用Python的Matplotlib库来创建各种数据可视化。我们将从基本的折线图开始,然后逐步介绍如何添加更多的功能和样式,以使您的图表更具吸引力和信息量。无论您是数据科学家、分析师还是任何需要将数据转化为视觉形式的专业人士,这篇文章都将为您提供一个坚实的起点。让我们一起潜入数据的海洋,用视觉的力量揭示其背后的故事。
42 16
|
15天前
|
数据可视化 数据挖掘 Python
逆袭之路!Python数据分析新手如何快速掌握Matplotlib、Seaborn,让数据说话更响亮?
在数据驱动时代,掌握数据分析技能至关重要。对于Python新手而言,Matplotlib和Seaborn是数据可视化的两大利器。Matplotlib是最基本的可视化库,适合绘制基础图表;Seaborn则提供高层次接口,专注于统计图形和美观样式。建议先学Matplotlib再过渡到Seaborn。快速上手Matplotlib需多实践,示例代码展示了绘制折线图的方法。Seaborn特色功能包括分布图、关系图及分类数据可视化,并提供多种主题和颜色方案。两者结合可实现复杂数据可视化,先用Seaborn绘制统计图,再用Matplotlib进行细节调整。熟练掌握这两者,将显著提升你的数据分析能力。
40 4
|
16天前
|
数据可视化 数据挖掘 API
使用Python进行数据可视化:探索Matplotlib和Seaborn库
【9月更文挑战第19天】在数据科学领域,将复杂的数据集转换成直观、易懂的图形是一项基本而关键的技能。本文旨在通过Python编程语言介绍两个强大的数据可视化库——Matplotlib和Seaborn,以及它们如何帮助数据分析师和研究人员揭示数据背后的故事。我们将从基础概念讲起,逐步深入到高级技巧,确保无论读者的背景如何,都能获得必要的知识和启发,以在自己的项目中实现有效的数据可视化。
|
16天前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
在数据驱动时代,分析师们像侦探一样在数字海洋中寻找线索,揭示隐藏的故事。数据可视化则是他们的“魔法棒”,将复杂数据转化为直观图形。本文将带你探索Python数据分析师如何利用Matplotlib与Seaborn这两大神器,成为数据可视化大师。Matplotlib提供基础绘图功能,而Seaborn在此基础上增强了统计图表的绘制能力,两者结合使数据呈现更高效、美观。无论是折线图还是箱形图,这两个库都能助你一臂之力。
32 4
下一篇
无影云桌面