可视化笔记1--matplotlib 常见图形绘制1

2023-11-15

可视化笔记1--matplotlib 常见图形绘制1

 

最近需要使用python实现部分数据的可视化,于是简单学习了下matplotlib绘图功能,基本包括:散点图、折线图、条形图、直方图、饼状图、箱形图等几种常用图形的绘制方式,相应学习笔记分享在此处,以便于后续参考。后续若有新功能函数,也会在此处加以补充!

 

1 环境搭建及小试牛刀

1.1 环境搭建

使用pip安装matplotlib 
pip install matplotlib

1.2 绘制一条直线和折线

源代码如下:

import matplotlib.pyplot as plt
plt.plot([1,2,3],[3,2,1]) #第一维度为[x轴线坐标],第二维度为y轴坐标
plt.show() #直线
plt.plot([1,2,3],[-3,2,1])#斜线,(2,2)为拐点
plt.show()

结果如下:

直线

折线

 

2 Numpy简介及小试牛刀

2.1 从python基础对象转化

print('Test1!')
testList = [1,2,3,4]
testNP = np.array(testList)
print(testNP)
#结果
Test1!
[1 2 3 4]

2.2 通过numpy内生的函数生成

print('\nTest2!')
testNP2 = np.arange(11)
print(testNP2)
#结果
Test2!
[ 0  1  2  3  4  5  6  7  8  9 10]

2.3 从硬盘(文件)读取

print('\nTest3!')
testNP3 = np.loadtxt('Test.csv',delimiter=',',skiprows=0,usecols=(1,3,5))
# skiprows 是否去掉前n行
print(testNP3.shape) #查看其维度
print(testNP3)
col1,col2,col3 = np.loadtxt('Test.csv',delimiter=',',skiprows=0,usecols=(1,3,5),unpack=True)
#unpack 可以将不同列放在不同的变量中
print(col1.shape,col2.shape,col3.shape)
#结果
Test3!
(9, 3)
[[1.92186580e-02 7.39918324e-01 6.92739011e+00]
 [2.93760812e-01 1.13097913e+01 3.67413910e+01]
 [1.96236090e-02 7.55508963e-01 6.90509116e+00]
 [1.93349450e-02 7.44395396e-01 6.97014908e+00]
 [1.93088890e-02 7.43392210e-01 7.13731147e+00]
 [1.98447450e-02 7.64022700e-01 7.15860926e+00]
 [1.94200260e-02 7.47671001e-01 7.07135229e+00]
 [2.08050220e-02 8.00993342e-01 7.64157691e+00]
 [2.07637100e-02 7.99402824e-01 7.49041704e+00]]
(9,) (9,) (9,)

2.4 创建切片

print('\nTest4!')
testNP4 = np.arange(11)
print(testNP4[0])
print(testNP4[:])
print(testNP4[:5])
print(testNP4[:5])
print(testNP4[::2]) #第一个:表示整个数组,第二个表示步长为2
print(testNP4[::-1]) #逆序
#结果
Test4!
0
[ 0  1  2  3  4  5  6  7  8  9 10]
[0 1 2 3 4]
[0 1 2 3 4]
[ 0  2  4  6  8 10]
[10  9  8  7  6  5  4  3  2  1  0]

2.5 常用函数

#1) np.funcName(x)
print('\nTest5!')
testNP5 = np.random.randint(1,100,10) #在1-100之间创建10个随机数
print(testNP5)
print(np.max(testNP5),' == ',testNP5.max())
#2) 排序
y = np.sort(testNP5) #未改变原数组
print(y,'\n',testNP5)
y= testNP5.sort() #改变原数组
print(testNP5)
#结果
Test5!
[46 61 31 11 78 71 40  2 30 85]
85  ==  85
[ 2 11 30 31 40 46 61 71 78 85] 
 [46 61 31 11 78 71 40  2 30 85]
[ 2 11 30 31 40 46 61 71 78 85]

 

3 散点图

散点图一般可以用于眼见两种变量的相关性,正相关、负相关、无明显相关性 
import以下库
import matplotlib.pyplot as plt
import numpy as np

3.1 身高体重图

heigh = [161,172,188,175,173,165]
weight = [50,58,80,70,69,55]
plt.scatter(heigh,weight)
plt.show()

C3_1

3.2 无相关性

x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x,y)
plt.show()

 

C3_2

3.3 正相关

x = np.random.randn(1000)
y = x+np.random.randn(1000)*0.5
plt.scatter(x,y)
plt.show()

C3_3

3.4 负相关

x = np.random.randn(1000)
y = -x+np.random.randn(1000)*0.5
plt.scatter(x,y)
plt.show()

C3_4

3.5 外观调整

x = np.random.randn(200)
y = np.random.randn(200)
plt.scatter(x,-y,alpha=0.5)
plt.scatter(x,y,s=50,c='r',marker="^",alpha=0.5)
#s 表示点面积大小,
#c 表示颜色
# marker 点的样式,参考 https://matplotlib.org/api/markers_api.html?highlight=marker#module-matplotlib.markers
# alpha 透明度调整,重叠部分透明度会增加,若值为1则无法看到透明度叠加情况
plt.show()

C3_5

 

4 折线图

折线图是用直线将数据连接起来构成的图形,常用来观察数据随时间变化的趋势,例如股价、温度变化等。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

4.1 普通折线图

x=np.linspace(-10,10,100) #在-10到10之间平均分为100份
y=x**2
plt.plot(x,y)
plt.show()
x=np.linspace(-10,10,8) #在-10到10之间平均分为8份
y=x**2
plt.plot(x,y)
plt.show()

C4_2

 

C4_2

4.2 横坐标为时间

x = ['01/04/2019', '02/04/2019','03/02/2019', '04/03/2019', '05/04/2019', '06/04/2019', '07/04/2019', '08/04/2019', '09/05/2019', '10/05/2019']
y = np.random.randint(1,10,len(x))
plt.plot_date(x,y,'-') #plt.plot_date(x,y)默认为点图,'-'为线图
plt.show()

C4_3

4.3 参数调节

x = ['01/04/2019', '02/04/2019','03/02/2019', '04/03/2019', '05/04/2019', '06/04/2019', '07/04/2019', '08/04/2019', '09/05/2019', '10/05/2019']
y = np.random.randint(1,10,len(x))
plt.plot_date(x,y,linestyle='--',c='r',marker='^') #默认为点图,'--'为虚线图
plt.plot_date(x,y+2,fmt='-g^') #fmt表示方式
#fmt = '[color][marker][line]' 参考文献:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot
#可以调整其linestyle、c、marker参数,也可以调整其fmt参数
plt.show()

C4_4

 

5 条形图

条形图以长方形的长度为变量来统计图表,可用于比较多个项目分类的数据大小,常用于较小的数据集分析,例如产品季度销量、不同国家人口等 
import以下库
import matplotlib.pyplot as plt
import numpy as np

5.1 垂直条形图

x = np.arange(5)
y = [20,10,30,25,15]
plt.bar(x=x,height=y,color='r',width=0.5)
plt.show()

 

C5_1

5.2 水平条形图

x = np.arange(5)
y = [20,10,30,25,15]
plt.bar(x=0,bottom=x,color='r',width=y,height=0.5,orientation='horizontal')
#plt.barh(y=x,color='r',width=y,height=0.5) #上面方式的等价函数
plt.show()

C5_2

5.3 并列条形图

bar_width=0.3
x_ = np.arange(4)
y1 = [52,55,63,53]
y2 = [44,66,55,41]
plt.bar(x=x_,height=y1,color='b',width=bar_width)
plt.bar(x=x_+bar_width,height=y2,color='r',width=bar_width)
#同理需要三个并列,则需要添加2倍的bar_width
plt.show()

C5_3

5.4 层叠图

bar_width=0.5
x_ = np.arange(4)
y1 = [52,55,63,53]
y2 = [44,66,55,41]
plt.bar(x=x_,height=y1,color='b',width=bar_width)
plt.bar(x=x_,height=y2,color='r',width=bar_width,bottom=y1) #添加bottom参数即可实现层叠图
plt.show()

C5_4

 

6 直方图

直方图有一系列高度不等的条形组成,表示数据分布的情况,如公司人员身高分布。直方图表示的数据可具有连续性,而条形图一般类别固定且不一定有连续性。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

6.1 普通直方图

mn=100 #平均值为100
sigma = 20 #标准差为20
x = mn +sigma*np.random.randn(2000)
plt.hist(x,bins=10,density=True)
#density/normed 是否要对数据标准化,True后纵坐标即为对应的频率
plt.show()

C6_1

6.2 直方图参数调节

mn=100 #平均值为100
sigma = 20 #标准差为20
x = mn +sigma*np.random.randn(2000)
plt.hist(x,bins=50,color='r',density=False)
#density/normed 是否要对数据标准化,True后纵坐标即为对应的频率
#bins 设置直方数量
plt.show()

C6_2

6.3 双变量直方图

#使用颜色深浅表示其频率,频率越高其亮度越亮,常用于分析双变量的联合分布情况
x=np.random.randn(1000)+2 #x的重心在2
y=np.random.randn(1000)+3 #y的重心在3
plt.hist2d(x,y,bins=40)
plt.show()

C6_3

 

7 饼状图

饼状图主要用于显示一系列数据中各项大小和比例,每个数据显示展整个饼状图的百分比。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

7.1 基础饼状图

labels =['A','B','C','D']
y = [15,20,25,40]
plt.pie(x=y,labels=labels,autopct='%.0f%%')
#autopct 显示所占百分比
#explode 用于对某块进行突出显示
plt.show()

C7_1

7.2 参数调节

labels =['A','B','C','D']
y = [15,20,25,40]
explode=[0,0.05,0.08,0]
plt.pie(x=y,labels=labels,autopct='%.0f%%',explode=explode,shadow=True)
#autopct 显示所占百分比
#explode 用于对某块进行突出显示
#shadow 添加阴影
plt.show()

C7_2

 

8 箱形图

箱形图又称盒须图、盒式图或者箱线图,式一种用作显示一组数据分散情况资料的统计图。其包括四种值,在图上显示为:上边缘,上四分位数、中位数、下四分位数,下边缘,异常值。 
import以下库
import matplotlib.pyplot as plt
import numpy as np

8.1 基础箱形图

np.random.seed(100)
data = np.random.normal(size=1000,loc=0,scale=1)
plt.boxplot(data)
plt.show()

C8_1

8.2 参数调节

# np.random.seed(100)
data = np.random.normal(size=1000,loc=0,scale=1)
plt.boxplot(data,sym='.',whis=0.5)
#sym 设置异常值的形状
#whis default = 1.5,值为浮点数,其大小可以调整其上/下边缘到上/下四分位的距离
plt.show()

data = np.random.normal(size=1000,loc=0,scale=1)
plt.boxplot(data,sym='.',whis=2.5)
#sym 设置异常值的形状
#whis default = 1.5,值为浮点数,其大小可以调整其上/下边缘到上/下四分位的距离
plt.show()

C8_2

C8_3

 

说明

以上默认测试python版本为python3.6.3,matplotlib 3.0.0

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可视化笔记1--matplotlib 常见图形绘制1 的相关文章

  • 类的 IPython 表示

    我正在使用我创建的模块尝试 IPython 但它没有显示类对象的实际表示 相反 它显示类似的内容 TheClass module TheClass name I heavily在这个模块中使用元类 我有真正有意义的类表示 应该向用户显示 是
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • python 中的“槽包装器”是什么?

    object dict 和其他地方的隐藏方法设置为这样的
  • 如果 PyPy 快 6.3 倍,为什么我不应该使用 PyPy 而不是 CPython?

    我已经听到很多关于PyPy http en wikipedia org wiki PyPy项目 他们声称它比现有技术快 6 3 倍CPython http en wikipedia org wiki CPython口译员开启他们的网站 ht
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 分布式锁实现方案3、基于Redis的SET操作实现的分布式锁

    在我的上一篇文章中 关于redis分布式锁的写法 释放锁还有些缺陷 细节见评论部分 本文进一步做了完善 分布式锁实现方案2 基于Redis的SET操作实现的分布式锁 package com alioo common lock import
  • 【leetcode.283】——移动零

    题目 注意 解析 思路 定义left和right指针 都初始化在数组的第一个位置 right指针一直向右走 如果right走到指向的值不为0时 那么right指针指向的值与left指针指向的值进行交换 然后left指针再向后走一步 如此循环
  • c++十大排序——快速排序

    算法基本知识铺垫 有些人可能不知道什么是稳定排序 原地排序 时间复杂度 空间复杂度 我这里先简单解释一下 1 稳定排序 如果 a 原本在 b 的前面 且 a b 排序之后 a 仍然在 b 的前面 则为稳定排序 2 非稳定排序 如果 a 原本
  • nodejs高大上的部署方式-PM2

    如果直接通过node app来启动 如果报错了可能直接停在整个运行 supervisor感觉只是拿来用作开发环境的 再网上找到pm2 目前似乎最常见的线上部署nodejs项目的有forever pm2这两种 使用场合 supervisor是
  • 旋转链表——快慢指针法的实践

    一 题目 给你一个链表的头节点 head 旋转链表 将链表每个节点向右移动 k 个位置 示例1 输入 1 gt 2 gt 3 gt 4 gt 5 gt NULL k 2 输出 4 gt 5 gt 1 gt 2 gt 3 gt NULL 解释
  • matlab灵敏度分析操作,灵敏度分析 使用MATLAB编写.doc

    灵敏度分析 使用MATLAB编写 实验二 线性规划的灵敏度分析 实验目的 1 线性规划求解的单纯形法的灵敏度分析的编程实现 2 掌握使用matlab Lingo Excel的规划求解功能求解 并利用 敏感性报告 进行分析 二 实验内容 课本
  • wazuh中的规则编写以及日志分析

    目录 什么是wazuh 如何搭建wazuh 实验环境 wazuh的规则 配置代理 wazuh中的配置了解 ssh的暴力破解 用户自定义规则 SQL注入的检测 什么是wazuh Wazuh是一个免费 开源和企业级的安全监控解决方案 用于威胁检
  • 【2223sW2】LOG2

    写在前面 好好学习 走出宿舍 走向毕设 一些心路历程记录 很少有代码出现 因为鬼知道哪条代码到时候变成毕设的一部分了咧 还是不要给自己的查重挖坑罢了 23 3 2 检验FFT 早上师兄帮忙看了一眼我画的丑图 说样子应该是对的 增加了检查的精
  • D3DXMESHOPT_ATTRSORT

    Mesh的顶点和索引能够被重组以便能更有效的渲染mesh 当我们这样做时 我们说我们优化了一个mesh 我们可以使用下面的方法来进行优化 HRESULT ID3DXMesh OptimizeInplace DWORD Flags CONST
  • DbVisualizer数据库管理工具

    一款数据库管理工具 推荐使用 安装包及破解方法见盘附件 百度云盘 http pan baidu com share link shareid 253466598 uk 1629211176
  • 【Unity3D日常开发】Unity3D中比较string字符串的常用方法

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好 我是佛系工程师 恬静的小魔龙 不定时更新Unity开发技巧 觉得有用记得一键三连哦 一 前言 字符串string的比较有很多方法 比如 E
  • vlc实现PC与树莓派的视频流传输

    目录 一 使用vlc实现PC与树莓派之间的视频流传输 一 Windows 二 树莓派 二 树莓派与Windows系统之间的聊天 三 非堵塞方式传输图像 视频文件 一 使用vlc实现PC与树莓派之间的视频流传输 一 Windows 安装下载v
  • opencv双目视觉标定,激光结构光提取,指定特征点获取世界坐标

    双目视觉标定 激光结构光提取 指定特征点获取世界坐标 标定方面 校正 结构光提取 二维点转换为三维点 总结 这学期在做双目视觉方面的事情 因为没人带 自己一个人踩了很多坑 因此在这写一点自己的总结心得 标定方面 首先标定主要就是为了确定左右
  • Qt5下串口编程中“QIODevice::write (QSerialPort): device not open”问题的分析处理总结

    一 实现功能说明 在主窗口中先配置好串口并 打开串口 在菜单中点击 测量 子窗口 进入子窗口画面 点击子窗口的 测量 按钮 实现读取传感器指令的数据发送 二 程序说明 主窗口 1 MainWidget h 定义类MainWidget 构造函
  • 数据库行锁

    数据库行锁 仅作为笔记 码字不易 转载请标明出处 文章目录 数据库行锁 前言 一 数据库行锁 前言 仅作为笔记 一 数据库行锁 两阶段锁 在 InnoDB 事务中 锁是在需要的时候才加上的 但并 是 需要 就立刻释放 而是要等到事务结束时才
  • Mongdb查询 - 比较运算符、逻辑运算符、$type、游标

    目录 一 比较运算符 Mongo查询条件和SQL查询对照表 比较运算符示例 二 逻辑操作符 逻辑操作符示例 not用法 and用法 eq用法 or用法 三 type操作符 四 文档游标 基本操作 游标的执行顺序 limit skip sor
  • CGAL的编译与配置

    CGAL的编译与配置 网上已经有一些配置的步骤 但是在具体配置过程中 发现有很多问题 折腾了两天后终于配置成功 在此做更详细的记录 准备 CGAL CGAL4 7和CGAL4 9的库 分别编译成功了 BOOST boost1 59的版本 C
  • 2022经典前端面试题大全 h5 +cs +js

    一 页面布局 三栏布局 题目 假设高度已知 请写出三栏布局 其中左栏 右栏宽度各为 300px 中间自适应 解答 可以有很多种布局方式 这里列出五种 float布局 absolute布局 flex布局 table布局 grid布局 代码如下
  • mybatis设计大接口的坑以及做法

    先说一些注意事项 1 注 mybatis一个mapper java文件只能对应一个mapper xml文件 所以不能一个mapper java对应两个xml 一个默认的 一个自己拓展的 2 注 如果表中有字段是text selectByEx
  • 可视化笔记1--matplotlib 常见图形绘制1

    可视化笔记1 matplotlib 常见图形绘制1 最近需要使用python实现部分数据的可视化 于是简单学习了下matplotlib绘图功能 基本包括 散点图 折线图 条形图 直方图 饼状图 箱形图等几种常用图形的绘制方式 相应学习笔记分