可视化笔记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 的相关文章

  • Python 3.4.3 tkinter - 程序在声明 IntVar 或任何其他 tkinter 数据类型时冻结

    上一主题 Python 3 4 tkinter checkbutton变量处理不起作用 响应 https stackoverflow com questions 33711472 python 3 4 tkinter checkbutton
  • Python 将列表中的字符串转换为数字

    我遇到了以下错误消息 以 10 为基数的 int 的文字无效 2 2 外部用单引号括起来 内部用双引号括起来 该数据位于primes列出使用print primes 0 样本数据在primes list 2 3 5 7 The primes
  • 对 Python DataFrame 进行子集化

    我正在从 R 过渡到 Python 我刚刚开始使用 Pandas 我有一个可以很好地子集化的 R 代码 k1 lt subset data Product p id Month lt mn Year yr select c Time Pro
  • Python中使用cv2获取当前视频播放位置

    我正在尝试使用 CV2 和 Python 从播放视频中获取当前播放时间位置 如果可能 以毫秒为单位 目前我正在使用此示例代码来播放视频文件 import cv2 import numpy as np file name 2 mp4 wind
  • Accel 无法在 gedit 3 插件中工作

    我试图为 Gedit 3 编写一个使用 GObject 自省的小插件 下面显示的代码的相关部分只是为了建立一个环境 然后我可以将函数放入按钮的回调中 但是 该按钮的加速器不起作用 这段代码有什么问题 我正在使用教程here http www
  • Pygame 玩家精灵没有出现

    我一直在为学校计算机课做这个项目 但无法让玩家精灵出现 有人可以帮忙吗 当我运行主游戏循环时 除了玩家精灵之外 所有内容都正确显示 它应该由于箭头输入而在屏幕上移动并受到重力的影响 当我删除图像并仅使用对象类和矩形时 该代码也有效 impo
  • 确定Python模块中的函数是否可用

    我正在研究一些使用Python套接字的代码socket fromfd http docs python org library socket html socket fromfd功能 但是 此方法并非在所有平台上都可用 因此我正在编写一些后
  • 如何更改条形图上的 y 轴限制?

    我有一个df 我从中索引了europe n我绘制了一个条形图 europe n r 5 c 45 looks like this df Country string df Population numeric 变量 plt bar df C
  • WTForms 中的小数字段舍入

    我有一个包含价格小数字段的表单 如下所示 from flask ext wtf import Form import wtforms from wtforms validators import DataRequired from deci
  • 如何使用泛型类型的构造函数

    如何使用 python 泛型类型的构造函数 T typing TypeVar T class MyClass typing Generic T def init self initialValue typing Iterable self
  • 使用子图绘制 pandas 数据框 (subplots=True):放置图例并使用紧凑的布局

    我真的很喜欢 pandas 来处理和分析大数据集 到目前为止 我主要使用 matplotlib 进行绘图 但现在想使用 pandas 自己的绘图功能 基于 matplotlib 因为它需要更少的代码 并且在大多数情况下对我来说似乎足够了 尤
  • 按字段名称对命名元组列表进行排序的 Pythonic 方法

    我想对命名元组列表进行排序 而不必记住字段名的索引 我的解决方案看起来相当尴尬 希望有人能有一个更优雅的解决方案 from operator import itemgetter from collections import namedtu
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • 如何抑制 pyinstaller 生成的可执行文件窗口中的所有警告

    我已经使用 pyinstaller 从 python 文件生成了可执行文件 该程序按其应有的方式工作 但在我想隐藏的窗口中出现了一条警告消息 当 python 文件在 IDE 中运行时 以下行会抑制所有警告消息 warnings filte
  • 监控单个文件

    我需要监控 使用watchdog http pythonhosted org watchdog index html 单个文件 而不是整个目录 避免监视整个目录的最佳方法是什么 我想this http pythonhosted org wa
  • Python unittest - 与assertRaises相反?

    我想编写一个测试来确定在给定情况下不会引发异常 测试是否有异常很简单is上调 sInvalidPath AlwaysSuppliesAnInvalidPath self assertRaises PathIsNotAValidOne MyO
  • Tornado websocket handler , self.close() 正在关闭连接而不触发 on_close() 方法

    我是 python stackoverflow tornado 的新手 所以请耐心等待 纠正我 我正在使用龙卷风开发实时应用程序 当我在 Websocket 处理程序类中调用 self close 时 on close 方法不会启动 这次我
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • 使用 Pandas 和 Group By 绘制堆叠直方图

    我正在使用如下所示的数据集 Gender Height Width Male 23 4 4 4 Female 45 4 4 5 我想可视化高度和宽度的堆叠直方图 我希望每个图有两个堆叠的直方图 每个性别一个 这是文档中的堆叠直方图 如果存在
  • 在 python 中使用递归替代 len()

    作为 CS1301 问题的一部分 我正在尝试使用递归编写一个函数 该函数将执行与 len 完全相同的操作 但是 我有两个问题 我正在使用全局变量 但我在课程中还没有学到这一点 cs1301 自动评分器告诉我 我的函数返回 26 而不是 13

随机推荐

  • 分布式锁实现方案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绘图功能 基本包括 散点图 折线图 条形图 直方图 饼状图 箱形图等几种常用图形的绘制方式 相应学习笔记分