首页 > 编程语言 >Python绘制精美可视化数据分析图表(一)-Matplotlib

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

时间:2022-11-16 11:03:48浏览次数:72  
标签:plt Python 数据 matplotlib 图表 可视化 Matplotlib rcParams 绘制

前言

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

在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​

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

其他系统可使用:

​pip3 list | grep matplotlib​

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

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

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()

Python绘制精美可视化数据分析图表(一)-Matplotlib_可视化大屏_03

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

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

下面我们具体介绍一下:

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

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

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = pd.Series(np.random.rand(2000))

data.plot()
plt.show()

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

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

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

绘制的图表如下

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

常用图表绘制

折线图
import matplotlib.pyplot as plt

x1 = [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'] = False

plt.title("折线图")

plt.legend()
plt.show()

Python绘制精美可视化数据分析图表(一)-Matplotlib_可视化大屏_08

条形图

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

import matplotlib.pyplot as plt

x1 = [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'] = False

plt.title("条形图")

plt.legend()
plt.show()

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

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

直方图

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

import matplotlib.pyplot as plt

x1 = [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'] = False

plt.title("直方图")

plt.legend()
plt.show()

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

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

散点图
import matplotlib.pyplot as plt
x = [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'] = False
plt.title('散点图')

plt.legend()
plt.show()

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

"o":表示散点

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

"v":表示三角形

"x":表示符号x

"d":表示菱形

"*":表示五角星

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

饼图

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

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

import matplotlib.pyplot as plt
Score = [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'] = False

plt.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%%')#将百分比放到各部分

Python绘制精美可视化数据分析图表(一)-Matplotlib_可视化大屏_12

图像注释
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data = 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'] = False

plt.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')) #添加红色箭头指定标注点

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

子图

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

import matplotlib.pyplot as plt

#解决中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False

fig = 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()

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

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

上面讲述的是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()

Python绘制精美可视化数据分析图表(一)-Matplotlib_可视化大屏_15

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

标签:plt,Python,数据,matplotlib,图表,可视化,Matplotlib,rcParams,绘制
From: https://blog.51cto.com/micai01/5851581

相关文章

  • Python基础之注释、变量、Debug调试、数据类型
    一、注释注释的作⽤⽤⼈类熟悉的语⾔对代码进⾏解释说明,⽅便后期维护。注释分为两类:单⾏注释和多⾏注释。1、单⾏注释只能注释⼀⾏内容,语法如下:#注释内容2、多⾏注释可以......
  • 【排序算法】python 十大经典排序算法(全网最详)
    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排......
  • python学习 爬取亚马逊网页,失败后。修改HTTP报文头部后成功!
    通过修改HTTP报文头部,来成功获取网页内容!  pythonimportrequestsr=requests.get("https://www.amazon.cn/gp/product/B01M8L5Z3Y")r.status_coder.encoding  >>>......
  • BIG T 下学期选修_python作业
    一共提交了10次作业3.1:importrandomb_Set=[]c_Set=[]i=1000while(i):b_Set.append(random.randint(0,10000))i=i-1i=1000while(i):c_Set.append(random.ran......
  • hc - python
    Grafanaalerts健康检查我们可以在Grafana的panel中设置alert当报警触发,我们有另外的程序会捕捉到它,并通过创建jira工单的方式,通报给相应的Team去处理为了能成功......
  • python课本学习-第五章
    一、列表的概念1、列表的创建列表是由一组任意类型的值组合而成的序列,组成列表的值称为元素,每个元素之间用逗号隔开。列表中的元素是可变的#列表类似于c++中的数组,数......
  • Python - request 报错:raise RemoteDisconnected("Remote end closed connection with
    2022-11-1521:46:20,261INFO[get_data.py(get_product_mode:46)]-当前page======>:255Traceback(mostrecentcalllast):File"D:\jlc_auto_test\fa_search_tes......
  • Python locust工具使用详解
    今年负责部门的人员培养工作,最近在部门内部分享和讲解了locust这个工具,今天再博客园记录下培训细节。相信你看完博客,一定可以上手locust这个性能测试框架了。一、简介1......
  • python神经网络编程
    计算机系统:输入->(计算)->输出建立模型可以模拟事情的运作神经网络的基本思想:持续细化误差值。大的误差需要大的修正值,小的误差需要小的修正值。尝试得到一个答案,并多......
  • Python 文本文件拖上转自适应图片 - 学习笔记(2022.11.16)
    Python文本文件拖上转自适应图片功能:1、支持拖拽执行2、文本文件转为自适应尺寸图片1importre2importos3importsys4importtime5fromPI......