笔记&代码

2023-11-12

可视化前三步走:数据类型,分析目的,实现工具

2.1 类别数据可视化

显示各类别的绝对频数及百分比等
条形图、饼图等
在这里插入图片描述

2.1.1 条形图及其变种

垂直条形图:类别在x轴
水平条形图:类别在y轴
简单条形图,并列条形图 堆叠条形图

1. 简单条形图 帕累托图

  • 绘制简单条形图
    layout:设置页面布局
    barplot:绘条形图
    参数
    xlab:x轴图例
    ylab:y轴图例
    horize:TURE水平,指水平or垂直放置条条
    density:条内的线线填充密度
    angle:条内线的角度
    col:颜色
    border:边框颜色
    main:标题
  • 例:不同社区、性别和态度的被调查者人数的简单条形图
attach(example2_1) #绑定数据框
table1<-table(社区)
table2<-table(性别)
table3<-table(态度) #生成频数表
layout(matrix(c(1,2,3,3),2,2,byrow=TRUE))#页面布局
par(mai=c(0.6,0.6,0.3,0.1),cex=0.7,cex.main=1,font.main=1)
#设置图形边距和字体大小
#绘制性别的条形图
barplot(table2,xlab="人数",ylab="性别",
        horiz=TRUE,#水平放置
        density=30,angle=0,#填充密度和密度线角度设置
        col=c("grey50","grey80"),border="black", #颜色向量
        main="(a)水平条形图")#标题
barplot(table3,xlab="态度",ylab="人数",
        density=20,angle=90,col=c("red","blue"),
        border=c(2,4),main="(b)垂直条形图")
barplot(table1,xlab="社区",ylab="人数",
        cex.names=1.2,cex.lab=1.2,#字体变大
        col=c("#FC8D62","#E78AC3","#66C2A5","#FFD92F")
        ,main="(c)垂直条形图")

在这里插入图片描述

  • 帕累托图:按各类别的频数多少排序后的条形图,能轻松看出哪类频数出现的得多/少
    例:
    sort:排序
    text:加标签
    par:加线
    plot:折线
    axis:加坐标
    mtext:加坐标轴标签
par(mai=c(0.7,0.7,0.2,0.7),cex=0.7)
x<-sort(table(example2_1$社区),decreasing=TRUE)#生成一维表并将频数降序排列
palette<-RColorBrewer::brewer.pal(4,"Blues")#设置调色板
bar<-barplot(x,xlab="社区",ylab="频数",col=rainbow(4),ylim=c(0,1.2*max(x)))
#条形图
text(bar,x,labels=x,pos=3,col="black")#为条形图添加频数标签
y<-cumsum(x)/sum(x)#计算累计频数
par(new=T)#绘制一新图加在现有图上
plot(y,type="b",pch=15,axes=FALSE,xlab='',ylab='',main='')
#绘制累积频数折线
axis(side=4)#在第四个边增加坐标
mtext("累计频率",side=4,line=3,cex=0.8)#添加坐标轴标签
text(labels="累积分布曲线",x=3,y=0.92,cex=1)#添加注释文本

在这里插入图片描述

2. 复式条形图和脊形图

  • 二维列联表绘图:并列条形图或堆叠条形图
    在并列条形图中,一个类别变量作为坐标轴,另一个类别变量各类别频数的条形并列摆放
    在堆叠条形图中,一个类别变量作为坐标轴,另一个类别变量各类别的频数按比例堆叠在同一个条中
  • 作图与一维差异不大,制作列联表时table内放两个变量即可
    BarText:添加频数标签
    barplot中参数
    beside:挨一起TRUE
    legend=rownames():添加条形图例
    args.legend=list(x= ,y= , ncol= ,cex= ,bos.col=" "):图例大小颜色修饰

(p41书上b3b4定义代码有两处bug,照着打debug好久才发现qwq)

tab1<-table(性别,社区)
tab2<-table(性别,态度)
tab3<-table(社区,态度)
library(DescTools)
par(mfrow=c(2,2),mai=c(0.55,0.6,0.6,0.1),cex=0.7,cex.main=1,font.main=1)
b1<-barplot(tab1,beside=TRUE,xlab="社区",ylab="人数",
            main ="(a)垂直并列",col=c("#66C2A5","#FC8D62"),
            legend=rownames(tab1),
            args.legend=list(x=12,y=19,ncol=2,cex=0.7,box.col ="grey80"))
BarText(tab1,b =b1, beside = TRUE , cex =1, top = TRUE )#添加频数标签
b2<- barplot (tab2, beside = TRUE , horiz =TRUE ,
              xlab ="人数", ylab="态度", 
              main="(b)水平并列", 
              col = c("#66C2A5","#FC8D62"), 
              legend = rownames(tab2),
              args.legend=list(x =9.2, y =7, ncol =2, cex =0.7,box.col ="grey80"))
BarText (tab2, b =b2, beside = TRUE , horiz = TRUE , cex =1, top = FALSE )
b3<-barplot (tab3,xlab ="态度", ylab ="人数", 
             main ="(c)垂直堆叠",
             col = c ("#FC8D62","#E78AC3","#66C2A5","#FFD92F"),
                      legend=rownames (tab3), 
                      args.legend =list(x =1.32, y =50, ncol =2, cex =0.7, box.col ="grey80"))
BarText (tab3, b=b3, cex =1)
b4<- barplot (tab3, horiz = TRUE , xlab ="人数", ylab ="态度", 
              main ="(d)水平堆叠", 
              col=c("#FC8D62","#E78AC3","#66C2A5","#FFD92F"),
              legend = rownames (tab3),
              args.legend =list(x =47, y =2.8, ncol =4, cex =0.7, box.col ="grey80"))
BarText (tab3, b =b4, horiz = TRUE , col ="black", cex =1)

在这里插入图片描述

  • 脊形图:根据各类别比例绘制得条形图。将某个类别各条的高度设定为1,条的宽度与样本量成正比
    spineplot:绘制脊形图
tab4<-table(社区,性别)
tab5<-table(态度,社区)
par(mfrow=c(1,2),mai=c(0.6,0.6,0.4,0.4),cex=0.7,cex.main=1,font.main=1)
palette<-rev(RColorBrewer::brewer.pal(4,"Reds"))#设置调色板
spineplot(tab4,data=example2_1,col=palette[1:2],xlab="社区",ylab="性别",main="(a)性别与社区")
spineplot(tab5,data=example2_1,col=palette,xlab="态度",ylab="社区",main="(b)社区与态度")

在这里插入图片描述

3. 马赛克图

两个以上变量使用,嵌套矩形面积与列联表相应单元的频数成正比
mosaicplot:绘制马赛克图
mosaic:vcd包 同上
strucplot:vcd包 同上
PlotMosaic:DescTools包 同上
geom_mosaic:ggmosaic包 同上

mosaicplot(~性别+社区+态度,
data=example2_1,
col=c("#E41A1c","#377EB8"),
cex.axis=0.8,off=5,main="")

在这里插入图片描述

2.1.2饼图及其变种

1. 饼图 扇形图

pie:绘制饼图
plotrix::pie3D:3D饼图

par(mfrow=c(1,2),mai=c(0.1,0.4,0.1,0.4),cex=0.7)
tab<-table(example2_1$社区)	#生成频数表
name<-names(tab)			#设置名称向量
percent<-prop.table(tab)*100#计算百分比
labs<-paste(name," ",percent,"%",sep="")#设置标签向量
pie(tab,labels=labs,init.angle = 90,radius=1,main="(a)普通饼图")
plotrix::pie3D(tab,labels=labs,explode=0.1,labelcex=0.7,main="(b) 3D饼图")

在这里插入图片描述
扇形图是看角度不是看面积
fan.plot:绘制扇形图

library(plotrix)
library(RColorBrewer)
tab<-table(example2_1$社区)
name<-names(tab)
percent<-prop.table(tab)*100
labs<-paste(name," ",percent,"%",sep="")
fan.plot(tab,labels=labs,
         max.span=0.9*pi,		#设置扇形最大跨度
         shrink=0.06,radius=1.2,#设置扇形错开的距离和半径
         label.radius=1.4,ticks=200,#设置标签与扇形的距离
         col=c("#FB8072","#FFFFB3","deepskyblue","pink"))#设置颜色向量

在这里插入图片描述

2. 环形图 饼环图

饼图挖个圈圈
饼环图能展示双层结构
ggDount:ggiraphExtra包 绘制环形图
ggPieDount:ggiraphExtra包 绘制饼环图

library(ggiraphExtra)
require(ggplot2)		#require和library一样
library(gridExtra)
p1<-ggDonut(example2_1,aes(donuts=社区),colour="white",xmin=2,xmax=4,title="(a)环形图")
p2<-ggPieDonut(data=example2_1,aes(pies=社区,donuts=态度),title="(b)饼环图")
grid.arrange(p1,p2,ncol=2)		#按两列组合两张图

在这里插入图片描述

2.2数据分布可视化

直方图、核密度图、箱线图、小提琴图、茎叶图、点图
在这里插入图片描述

2.2.1 直方图 核密度图

1. 直方图

hist:直方图绘制

  • hist中参数
    breaks:设置数组
    probability:默认FALSE,TRUE为绘制纵轴为密度的直方图
    labels:TRUE为直方图增加频数或密度

lines(density(x)):为直方图增加核密度估计曲线
curve(dnorm(x,mean(x),sd(x))):为直方图增加均值为mean,标准差为sd的正态曲线
rug(x):画出x在坐标轴上位置
jitter(x):计算x的各扰动点

example2_2<-read.csv("example2_2.csv")
attach(example2_2)
par(mfrow=c(2,3),mai=c(0.4,0.5,0.4,0.1),cex=0.7,font.main=1)
hist(北京,labels=TRUE,col="#FFD92F",xlab="AQI",ylab="频数",ylim=c(0,90),main="(a)北京:添加频数标签")
hist(上海,breaks=20,col="skyblue",xlab="AQI",ylab="频数",main="(b)上海:数据分成20组")
hist(郑州,breaks=20,col="lightgreen",xlab="AQI",ylab="频数",main="(c)郑州:添加地毯图")
rug(郑州)#添加地毯图
hist(武汉,breaks=20,col="#FC8D62",xlab="AQI",ylab="频数",main="(d)武汉:添加扰动点")
rug(jitter(武汉))#添加扰动点
hist(西安,prob=TRUE,breaks=20,col="pink",xlab="AQI",ylab="密度",ylim=c(0,0.012),main="(e)西安:添加核密度曲线")
lines(density(西安),col="blue3",lwd=1)#添加核密度曲线
hist(沈阳,prob=TRUE,breaks=20,col="orange",xlab="AQI",ylab="密度",main="(f)沈阳:添加理论正态分布曲线")
curve(dnorm(x,mean(沈阳),sd(沈阳)),col="blue",add=TRUE)#添加正态分布曲线

在这里插入图片描述
b是指定分成20组绘制的直方图
c添加地毯图以观察实际数据在坐标轴上的分布
d计算数据扰动点,避免相同数据点在坐标轴上的重叠
e加的核密度曲线是以实际数据分布密度的估计,显示数据分布的形状
f添加理论正态分布曲线,与直方图比较可判断是否近似服从正态分布

2. 核密度图

直方图是粗略估计,核密度图是较为精准的估计(平滑曲线)
核密度曲线平滑程度取决于带宽bw,bw越大越平滑

  • 可绘制核密度曲线的函数
    sm.density.compare:sm包
    density:psych包
    densityplot:lattice包
    geom_density:ggplot2包
    histogram.ade:epade包
    PlotMultiDens:DescTools包
  • 带宽对核密度曲线的影响
d<-example2_2$北京
par(mfrow=c(1,3),mai=c(0.6,0.6,0.3,0.1),cex=0.7,cex.main=1,font.main=1)
d1<-density(d)
d2<-density(d,bw=3)
d3<-density(d,bw=10)
plot(d1,xlab="AQI",ylab="Density",main="(a)默认带宽")
plot(d2,col="red",xlab="AQI",ylab="Density",main="(b)bw=3")
polygon(d2,col="orange",border = "black")#填充橙色
plot(d3,col="red",xlab="AQI",ylab="Density",main="(c)bw=10")
polygon(d3,col="orange",border = "black")#填充

在这里插入图片描述
将六个核密度曲线放在一起,可以比较分布程度及偏斜程度

library(reshape2)
library(DescTools)
df<-melt(example2_2,id.vars=c("日期"),variable.name="城市",value.name="AQI")#将数据融合成长格式
par(mfrow=c(2,1),mai=c(0.6,0.6,0.3,0.1),cex=0.7,font.main=1)
PlotMultiDens(data=df,AQI~城市,col=Pal(),xlab="AQI",ylab="Density",xlim=c(-1,400),lwd=1,main="(a)核密度曲线")
PlotMultiDens(data=df,AQI~城市,xlab="AQI",ylab="Density",xlim=c(-1,400),fill=SetAlpha(rainbow(6),0.2),main="(b)填充颜色")

在这里插入图片描述

2.2.2 箱线图和小提琴图

用于比较多个变量或多个样本的分布

1. 箱线图

展示分布是否对称,是否存在离群点

  1. 找中位数(median)和两个四分位数(quartiles),画箱子
  2. 计算内围栏,并画出须线。
    内围栏(inter fence)是与四分位数的距离等于1.5倍四分位差的两个点,
    其中
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

笔记&代码 的相关文章

  • R语言备忘录

    title dataclear rbase author MengKe date 2023 03 12 output html document 1 Load R packages library ggplot2 library tidyr
  • Navicat for MySQL客户端启动报missing required library libmysq_e.dll126 错误

    Navicat for MySQL客户端启动报missing required library libmysq e dll126 错误 是因为缺少libmysq e dll 文件所致 下载libmysq e dll 文件拷贝到到Navica
  • Rstudio更换主题/样式

    github项目地址 https github com gadenbuie rsthemes 安装 在 rstudio 的控制台console中数据 install packages devtools devtools install gi
  • 论文R语言复现

    高斯混合概率在众多领域都有重要应用 依据已知观测数据估计高斯模型中未知参数就显得尤为重要 由于观测值具体来自于高斯分布的哪个分模型是未知的 那么利用传统的极大似然 MLE 方法进行参数估计就变得十分困难 引入 EM 算法 该方法通过构造分布
  • R语言基本函数的学习(持续更新)

    目录 前言 Tidyverse包 arrange 函数 head 函数 filter 函数 select 函数
  • 看书标记【R语言数据分析与挖掘实战】4

    第四章 数据预处理 4 1 数据清洗 缺失值处理 使用is na 判断缺失值是否存在 complete cases 可以识别样本数据是否完整从而判断缺失情况 删除法 na omit 函数移除所有含有缺失数据的行 data p 删除p列 替换
  • R语言 数据处理(一)

    数据合并 提取及降维处理 install packages dplyr 数据处理包dplyr library dplyr name1 lt c Bob Mary Jane Kim name2 lt c Bob Mary Kim Jane w
  • PCE投稿要求

    进入PCE的投稿网址 http mc manuscriptcentral com pce 查了一下 大家都建议创建ORCID号 于是按照指示创建了 蓝色笔圈起来的是一些投稿指导 于是打开Instructions Forms Instruct
  • R语言作图:坐标轴设置

    R语言作图 坐标轴设置 偷闲阁 2018 02 04 20 51 24 209654 收藏 359 分类专栏 R语言 可视化 文章标签 R 坐标轴 刻度 可视化 版权声明 本文为博主原创文章 遵循 C
  • 生信技能树R语言学习

    一 数据类型和向量 1 数据类型 1 1 判断数据类型class 1 2 按Tab键自动补全 1 3 数据类型的判断和转换 1 is 族函数 判断 返回值为TRUE或FALSE is numeric 123 is character a i
  • 如何编写R函数

    转载自http blog sciencenet cn blog 255662 501317 html R语言实际上是函数的集合 用户可以使用base stats等包中的基本函数 也可以自己编写函数完成一定的功能 但是初学者往往认为编写R函数
  • SQL中去掉字符串中最后一个字符(小技巧)

    长度减一就可以了 select left 字段名 len 字段名 1 from 表名
  • 转载:R语言绘图—图形标题、坐标轴设置

    R语言绘图是通过函数命令及相应参数设置实现的 如plot x y plot为绘图函数命令 x y则是绘图参数 指定了绘图的数据向量 但这种最基本的绘图设置很难满足个性化绘图的要求 我们需要根据需要对图形元素进行设置 图形元素是各类图形的基本
  • R语言【数据集的导入导出】

    目录 一 从键盘输入数据 二 函数方法读取 1 读取数据文件 2 从屏幕读取数据 1 scan 2 readline 3 读取固定宽度数据文件 三 读取csv文件 四 读取表格数据文件 五 从网络中读取表格或者CSV数据文件 一 从键盘输入
  • 使用R语言构建泊松回归模型

    使用R语言构建泊松回归模型 泊松回归是一种广泛应用于计数数据分析的回归模型 它是基于泊松分布的概率模型 用于描述事件在一定时间或空间范围内发生的次数 在本文中 我们将学习如何使用R语言构建泊松回归模型 并提供相应的源代码示例 1 数据准备
  • R语言中用于计算Rsquare的包rsq

    文章目录 理论介绍 线性模型情形 广义线性模型情形 函数介绍 rsq 的介绍 实例 rsq partial 的介绍 相关文献 pcor 函数介绍 vresidual 函数介绍 实例 理论介绍 线性模型情形 R squared 值范围 0 1
  • [R语言] R语言PCA分析教程 Principal Component Methods in R

    R语言PCA分析教程 Principal Component Methods in R 代码下载 主成分分析Principal Component Methods PCA 允许我们总结和可视化包含由多个相互关联的定量变量描述的个体 观察的数
  • 不同kNN模型在R语言中的比较

    不同kNN模型在R语言中的比较 k近邻 k Nearest Neighbors 简称kNN 是一种常见的机器学习算法 被广泛用于分类和回归问题 它基于一个简单的假设 与某个样本集中距离最近的k个样本具有相似的特征和标签 本文将探讨在R语言中
  • R语言——基本操作(一)

    目录 一 基本操作 二 R包的安装及使用 三 获取帮助 四 内置数据集 五 数据结构 六 向量索引 七 向量运算 参考 Rstudio 控制台常用快捷键 Ctrl 查看所有历史记录 比直接使用 查找更方便 Esc 中断操作 可中断未完成的操
  • R语言采集获取58商铺出租转让信息

    前两篇文章给我一个朋友分析出店铺商品以及地址房源信息 后来去看了下店铺房租有点贵 还是毛坯房 要自己装修 本着节约成本的原则 熬了个通宵 给他采集了一些转租商铺数据 因为数据比较多 过于先进不方便展示 我就将我爬虫程序的模版展示给大家观看

随机推荐

  • React Hooks--与传统react写法比较

    React Hooks 简介 2018年底FaceBook的React小组推出Hooks以来 所有的React的开发者都对它大为赞赏 React Hooks就是用函数的形式代替原来的继承类的形式 并且使用预函数的形式管理state 有Hoo
  • oracle按照首汉字首字母排序

    按照拼音顺序 ORDER BY nlssort NAME NLS SORT SCHINESE PINYIN M 按照部首顺序 ORDER BY nlssort NAME NLS SORT SCHINESE RADICAL M 按照笔画顺序
  • websocket实现聊天室(一)

    最近接到一个聊天室的任务 之前在学校完全没有接触过这方面的需求 在网上查找资料后 基本确定了实现方案 现在就开始着手学习 在此记录一下遇到的问题 初识websocket 在简单了解websocket后 我觉得与http请求类似 不过webs
  • 读取g2o 文件的python实现

    可以读取2D 和 3D的 g2o 文件 并可以把四元数的位姿转换为节点和边数据 import argparse import numpy as np import pyquaternion File Format Vertex 2D Rob
  • H.264 标准简介

    JVT Joint Video Team 视频联合工作组 于2001年12月在泰国Pattaya成立 它由ITU T和ISO两个国际标准化组织的有关视频编码的专家联合组成 JVT的工作目标是制定一个新的视频编码标准 以实现视频的高压缩比 高
  • Visual Studio编译出来的程序无法在其它电脑上运行

    在其它电脑 比如Windows Server 2012 上运行Visual Studio编译出来的应用程序 结果报错 无法启动此程序 因为计算机中丢失VCRUNTIME140 dll 尝试重新安装该程序以解决此问题 解决方法 属性 gt 配
  • PNP和NPN磁感应开关有什么区别

    1 我们以磁性开关为例 先要搞清楚PNP NPN 表示的意思是什么 P表示正 N表示负 PNP表示平时为高电位 信号到来时信号为负 NPN表示平时为低电位 信号到来时信号为高电位输出 接近开关和光电开关只是检测电路不同输出相同 至于PLC接
  • Spring 提示:无法找到元素 'aop:aspectj-autoproxy'

    问题描述 org springframework beans factory xml XmlBeanDefinitionStoreException Line 18 in XML document from class path resou
  • 程序员从初级到中级10个秘诀

    新闻来源 techrepublic comJustin James曾发表过一篇博文 10 tips for advancing from a beginner to an intermediate developer 为我们分享如何才能完成
  • syskey (win7启动密码)加密和破解方法

    1 什么是syskey Syskey是NT Service Pack 3中带的一个工具 用来保护SAM数据库不被离线破解 用过去的加密机制 如果攻击者能够得到一份加密过的SAM库的拷贝 他就能够在自己的机器上来破解用户口令 2 如何开启sy
  • [Json依赖] JSONObject的依赖包

  • Windos10专业版开启远程桌面协助

    我需要控制局域网的电脑 这台电脑是win10专业版 搜索 远程桌面设置 进入后启动远程桌面设置 然后发现当前用户已经有访问权 当前用户没有密码 那么远程失败 解决方法是 按win r 输入GPEDIT MSC 计算机配置 gt 安全设置 g
  • 前端框架React

    前端框架React 组件基础 React事件机制 哪些方法会让React重新渲染 render会做什么 React类组件和函数组件 React高阶组件 和普通组件的区别 适用场景 React受控组件和非受控组件 React有状态组件和无状态
  • java enum compare_Java Compare Enum value

    In Java you can use operator to compare Enum value 1 Java Enum example Language java package com mkyong java public enum
  • 啥?简单的题都不会,可咋整呢?

    目录 一 寻找原因 二 寻找解决方法 三 常见的刷题网站 刷题技巧 明明自觉学会了不少知识 可真正开始做题时 却还是出现了 一支笔 一双手 一道力扣 Leetcode 做一宿 的窘境 你是否也有过这样的经历 题型不算很难 看题解也能弄明白
  • Python3获取股票行情数据(中国个股/中国指数/全球指数)

    usr local bin python3 coding utf 8 source http www cnblogs com txw1958 import os io sys re time json base64 import webbr
  • Js常用面试题目知识整理

    Js代码题 1 千分位 题目 要求返回参数数字的千分位分隔符字符串 思路 在字符串长度不确定的情况下 可以使用递归 comma number 1000 是获取数字最后三位 将其放在返回值的最后面 并且在前面加一个逗号 comma Math
  • freenom域名申请教程

    freenom域名申请教程 1 注册 申请域名 打开freenom官网 注册一个账户 注意 如果没有明显的注册按钮 可以通过如下方式同时申请域名和注册账户 打开域名申请 不用注册 选择好了域名之后 点击Checkout 选择免费期限 最长的
  • shell脚本编程 实例讲解(键盘输入三个数字,按照从大到小的书顺序输出)

    1 键盘输入三个数字 按照从大到小的书顺序输出 排序题 a b c 2 10 9 a 2 b 10 c 9 第一步 两两相互进行比较 比较三次 第二步 不论谁大谁小 最后都输出 a b c 从大从小 a永远存储的都是最大值 a和b进行比较
  • 笔记&代码

    可视化前三步走 数据类型 分析目的 实现工具 2 1 类别数据可视化 显示各类别的绝对频数及百分比等 条形图 饼图等 2 1 1 条形图及其变种 垂直条形图 类别在x轴 水平条形图 类别在y轴 简单条形图 并列条形图 堆叠条形图 1 简单条