笔记&代码 | 统计学——基于R(第四版) 第二章数据可视化

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

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倍四分位差的两个点,
    其中𝑄(25%)−1.5×𝐼𝑄𝑅称为下内围栏,
    𝑄(75%)+1.5×𝐼𝑄𝑅称为上内围栏。
    上下内围栏一般不在箱线图中显示,只是作为确定离群点的界限。
  3. 计算相邻值,找出上下内围栏之间的最大值和最小值,即非离群点的最大值和最小值,称为相邻值(adjacent value),
    其中大于𝑄(25%)−1.5×𝐼𝑄𝑅的最小值称为下相邻值,
    小于𝑄(75%)+1.5×𝐼𝑄R 的最大值称为上相邻值。
    用直线将上下相邻值分别与箱子连接,称为须线(whiskers)。
  4. 找离群点,并在图中单独标出。
    离群点(outlier)是大于上内围栏或小于下内围栏的数值,也称外部点(outside value),在图中用“o”单独标出

boxplot:绘制箱线图
boxplot参数
range:默认=1.5倍四分位差为内围栏,range=0将极值与箱子连线
width:自定义箱子宽度
varwidth:默认FALSE所有箱子宽度一样,TRUE宽度与样本量的平方根成正比
notch:TRUE绘制凹槽箱线图
horizontal:TRUE将箱线图横置

points函数:添加点

  • 6个城市AQI分布的箱线图
par(mai=c(0.6,0.6,0.1,0.1),cex=0.7)
palette<-RColorBrewer::brewer.pal(6,"Set2")#设置离散型调色板
boxplot(example2_2[,2:7],xlab="城市",col=palette,ylab="AQI")
points((apply(example2_2[,2:7],2,mean)),col="blue3",cex=1.5,pch="+")#用+号画出均值点

在这里插入图片描述

2. 小提琴图

比箱线图多显示核密度估计曲线
vioplot:vioplot包 绘制小提琴图

library(vioplot)
par(mfrow=c(1,1),mai=c(0.6,0.6,0.1,0.1),cex=0.7)
palette<-RColorBrewer::brewer.pal(6,"Set2")#设置离散型调色板
points((apply(example2_2[,2:7],2,mean)),col="blue3",cex=1.5,pch="+")#画出均值点
vioplot(example2_2[2:7],col=palette,xlab="城市",ylab="AQI")

在这里插入图片描述

2.2.3 茎叶图和点图

1. 茎叶图

数据量小时,能保留原始数据信息

  • 由“茎”和“叶”两部分构成
    以该组数据的高位数值作树茎,低位数字作树叶
    树叶上只保留最后一位数字
  • 茎叶图类似于横置的直方图,但又有区别
    直方图可观察一组数据的分布状况,但没有给出具体的数值
    茎叶图既能给出数据的分布状况,又能给出每一个原始数值,保留了原始数据的信息
    直方图适用于大批量数据,茎叶图适用于小批量数据

stem.leaf:aplpack包 绘制茎叶图
stem.leaf.backback:背靠背茎叶图

library(aplpack)
stem.leaf(example2_2$北京,unit=1,m=1)     # 数据的单位为1,茎叶图的行数为1

1 | 2: represents 12
 leaf unit: 1
            n: 365
    6     2 | 378899
   40     3 | 0000002233334445555566688899999999
   82     4 | 000001111223333344555666777777788888888999
  120     5 | 00011122444445555556666667777888899999
  160     6 | 0000000011111112344444445555557777788899
  (42)    7 | 000001222233333334444444455555567888888999
  163     8 | 00001233555556677789
  143     9 | 00011223444566778
  126    10 | 0000011112344444455789999
  101    11 | 0222333446777777889999
   79    12 | 00033444667777899
   62    13 | 0001224457788999
   46    14 | 12233445679
   35    15 | 001468
   29    16 | 22336779
   21    17 | 013555889
   12    18 | 036789
    6    19 | 35
HI: 213 233 233 267
#背靠背茎叶图 可以比较上半年和下半年AQI分布差异
> library(aplpack)
> stem.leaf.backback(example2_2$北京[1:181],example2_2$北京[182:365],back.to.back=TRUE)     # 数据的单位为1,茎叶图的行数为1
__________________________________________________________________
  1 | 2: represents 12, leaf unit: 1 
          example2_2$北京[1:181]      example2_2$北京[182:365]    
__________________________________________________________________
                              |  2 |378899                    6   
   16         9999886655533220|  3 |000003344455689999       24   
   38   9988887776554322111000|  4 |00133334566777788889     44   
   57      9888777666655444221|  5 |0001144555566789999      63   
   77     99855544431111000000|  6 |00111244445557777788     83   
  (20)    99888886554444333210|  7 |0000222333344445555789  (22)  
   84                875555100|  8 |00233566779              79   
   75                  8774410|  9 |0012234566               68   
   68              99874441110| 10 |00001234445599           58   
   57                877764322| 11 |0233477789999            44   
   48               9766444300| 12 |0377789                  31   
   38             999887544210| 13 |0027                     24   
   26                    54321| 14 |234679                   20   
   21                      864| 15 |001                      14   
   18                     9632| 16 |2377                     11   
   14                    95510| 17 |3588                      7   
    9                     8760| 18 |39                        3   
    5                       53| 19 |                              
                              | 20 |                              
__________________________________________________________________
HI: 213 233 267                     HI: 233                       
n:                         181      184                       
__________________________________________________________________

2. 点图

各数据用点绘制在图中
点图有多种形式,最常见的是克利夫兰(Cleveland)点图
检测数据离群点的有效工具
当数据量较少时,可以替代直方图和箱线图来观察数据的分布

  • dotplot:lattice包 绘制点图
  • ggdotchart:ggpubr包 同上
df<-melt(example2_2,id.vars=c("日期"),variable.name="城市",value.name="AQI")#将数据融合成长格式
par(mai=c(0.6,0.6,0.2,0.2),cex=0.7,font=2)
palette<-rev(RColorBrewer::brewer.pal(6,"Set2"))#设置调色板
dotchart(df$AQI,groups=df$城市,gcolor=palette,lcolor="grey95",pch="o",col=palette[df$城市],pt.cex=0.3,xlab="AQI",ylab="城市")

在这里插入图片描述

2.3 变量间关系可视化

在这里插入图片描述

2.3.1散点图和散点图矩阵

1. 散点图

观察两个变量间是否有关系,观察关系的形态以及关系强度
plot:绘制散点图
lm:对数据进行线性回归
abline:加入拟合函数

example2_3<-read.csv(("example2_3.csv"))
plot(example2_3$总股本,example2_3$每股收益,pch=19,col="green4",xlab="总股本",ylab="每股收益")
abline(lm(example2_3$每股收益~example2_3$总股本),lwd=2,col="red")#添加回归线

在这里插入图片描述
如果想在散点图中反映两个变量的分布信息,可在散点图中添加每个变量的边际图

library(ggpubr)
ggscatterhist(example2_3,x="总股本",y="每股收益",
              title="边际图为直方图的散点图",
              size=1,color="forestgreen",#设置点的大小和颜色
              rug=TRUE,#添加地毯图
              margin.plot="histogram",#设置边际图的类型为直方图
              margin.params=list(fill="deepskyblue",color="black"),#设置边际图的填充颜色和线的颜色
              ggtheme=theme_minimal())#设置图形主题

在这里插入图片描述

2. 散点图矩阵

将多幅散点图绘制成矩阵的形式
散点图矩阵中,对角线上下两部分是对称的图形,也可以将对角线的下方(或上方)绘制出一种形式的散点图(或相关系数),对角线上方(或下方)绘制出另一种形式的散点图(或相关系数)

  • 可以绘制散点图矩阵的函数
    plot:graphics包
    pairs:graphics包
    corrgram:corrgram包
    scatterplotMatrix:car包

普通的散点矩阵

plot(example2_3,cex=0.8,gap=0.5)
#设置点的大小和各散点图之间的间隔

在这里插入图片描述
主对角线上绘制了每个变量的核密度图,用于分析各变量的分布特征,为回归建模提供参考;散点图中分别绘制了拟合的直线曲线以及置信区间,椭圆越扁平,相关性越强

library(car)
scatterplotMatrix(~总股本+每股收益+每股净资产+每股现金流量,example2_3,
                  diagonal=TRUE,#对角线绘制各本例的核密度图
                  ellipse=TRUE,#绘制椭圆
                  col="steelblue3",#设置颜色
                  gap=0.5)

在这里插入图片描述
带影线的矩形,左下到右上斜线代表正相关,使用蓝色,相关系数越大相关性越强
左上到右下斜线负相关,红色

library(corrgram)
corrgram(example2_3,main="在对角线下方画出阴影线,上方画出饼图",
         order=TRUE,#按相关系数排列变量
         lower.panel=panel.shade,#对角线下方绘制阴影线
         upper.panel=panel.pie)#对角线上方绘制饼图

在这里插入图片描述

2.3.2 3D散点图和气泡图

表示三个变量之间的关系

1. 3D散点图

绘制3D散点图的函数
scatter3D:plot3D包
scatterplot3d:scatterplot3d包
scatter3d:vcd包

library(lattice)
#绘制a图
p1<-cloud(总股本~每股收益+每股净资产,data=example2_3,
             par.settings=list(par.xlab.text=list(cex=0.6),#x轴标签字体大小
                               par.ylab.text=list(cex=0.6),
                               par.zlab.taxt=list(cex=0.6)),
             main="(a)总股本~每股收益+每股净资产")
#绘制b图
p2<-cloud(每股收益~每股净资产+每股现金流量,data=example2_3,
             par.settings=list(par.xlab.text=list(cex=0.6),
                               par.ylab.text=list(cex=0.6),
                               par.zlab.taxt=list(cex=0.6)),
             main="(b)每股收益~每股净资产+每股现金流量")
#组合ab两图
plot(p1,split=c(1,1,2,1))
plot(p2,split=c(2,1,2,1),newpage=F)

在这里插入图片描述
能看出a为负关系,b为正关系

2. 气泡图

用变量x和y画出散点图,第3个变量数值的大小用圆的大小表示
symbols:气泡图 inches,fg,bg

attach(example2_3)
symbols(每股收益,每股净资产,总股本,
            inches=0.15,#设置气泡半径
            fg="black",#圆的颜色
            bg="pink")#圆的填充颜色
mtext("气泡大小=总股本",line=-2,cex=0.8,adj=0.1)#添加注释文本

在这里插入图片描述
大致在一条线,气泡随线越来越下 ,说明有关有关有关

2.4 样本相似性可视化

比较样本是否有相似性
轮廓图,雷达图,星图,脸谱图,聚类图,热图
介绍轮廓图,雷达图,星图
在这里插入图片描述

2.4 1 轮廓图

轮廓图(outline plot)(平行坐标图,多线图):x轴表示各样本,y轴表示每个样本的多个变量的数值,将同一样本在不同变量上的观测值用折线连接起来。
观察折线形状,排列方式,可比较样本在多变量上取值的相似性及差异
PlotLinesA:绘制轮廓图

example2_4<-read.csv("example2_4.csv")
library(DescTools)
mat<-as.matrix(example2_4[,2:9])
rownames(mat)=example2_4[,1]#数据框转换成矩阵
par(mai=c(0.6,0.6,0.1,0.1),cex=0.6)
PlotLinesA(t(mat),xlab="消费项目",ylab="支出金额",args.legend=NA,
           col=rainbow(13),pch=21,pch.col=1,pch.bg="white",pch.cex=1)
legend(x="topright",legend=example2_4[,1],lty=1,
       col=rainbow(13),box.col="grey80",inset=0.01,ncol=1,cex=0.8)#添加图例

在这里插入图片描述

2.4.2 雷达图

雷达图(蜘蛛图):不同坐标的刻度可能不可比,多条线之间比较才有意义
ggRadar:雷达图 theme中参数axis.text,legend.position,legend.text
radarchart:fmsb包 绘制雷达图

library(ggiraphExtra)
library(ggplot2)
ggRadar(data=example2_4,rescale=FALSE,#尺度不缩放,使用原始数据
        aes(group=地区),alpha=0,size=1)+#按地区分组
  theme(axis.text=element_text(size=7),#设置坐标轴字体大小
        legend.position="right",#设置图例位置
        legend.text=element_text(size="6"))+#设置图例字体大小
  theme_bw()#去掉底色

在这里插入图片描述

2.4.3 星图 太阳图

星图称为雷达图(蜘蛛图)
从一个点出发,每个变量用一条射线表示,P个变量形成P条射线(P个坐标轴),每个样本在P个变量上的取值连接成线,即围成一个区域,多个样本围成多个区域
利用雷达图也可以研究多个样本之间的相似程度
需要先对变量做标准化处理

stars:绘制星图,参数full,scale,len,mar,cex
symbol:symbols包
symbol函数中参数type不同图不同,star星图,sun太阳图,bar条形图,profile断面图

mat<-as.matrix(example2_4[,2:9])
rownames(mat)=example2_4[,1]#数据框转化成矩阵
stars(mat,nrow=4,#排列成4行
      full=TRUE,#绘制出满圆当作图例
      scale=TRUE,#将数据缩放到[0,1]范围
      len=1,#设置半径或线段长度的比例
      draw.segments=TRUE,#绘制线段图,
      key.loc = c(7,2,3),#并设置位置
      mar=c(0.5,0.1,0.1,0.1),#设置图形边界
      cex=1.1)#设置标签字体大小

在这里插入图片描述
右下角的图为标准星图,相当于图例

  • 太阳图各指标值越大围成区域越大
library(symbols)
symbol(example2_4,type="sun",colin=1,labels=1,labelsize=1,scheme=1)

在这里插入图片描述

2.5 时间序列可视化

在不同时间点上记录的一组数据
最基本使用折线图和面积图

2.5.1 折线图

书上两段代码均有错误,上课没认真听讲,问了同学结果发现老师也没彻底改对赫赫

example2_2<-read.csv("example2_2.csv")
library(reshape2)
library(ggplot2)
date<-as.Date(example2_2$日期)#将日期转化成日期变量date
d<-data.frame(日期=date,example2_2[,-1])#date合并到数据框d中
df<-melt(d,id.vars="日期",variable.name="城市",value.name = "AQI")#融合数据为长格式
mytheme<-theme(legend.position = "none",
               axis.title = element_text(size=10),
               axis.text=element_text(size=7))
ggplot(df,aes(x=日期,y=AQI,color=城市))+
  geom_line()+
  facet_wrap(vars(城市),ncol=2)+mytheme

在这里插入图片描述

2.6 可视化的注意事项

  • 一幅完整的图形大体上包括图形主体、标题、坐标轴注释等要素。图形主体用于表达数据信息
  • 标题用于注释图形的内容,一般包括数据所属的时间(when)、地点(where)和内容(what),此外,还应包括必要的图形编号。标题可以放在图的上方,也可放在图的下方
    坐标轴注释需要标示出坐标轴代表的变量名称,以便于阅读和理解
  • 图形的比例也十分重要,一般图形大致为4:3的一个矩形,过长或过高的图形都有可能歪曲数据,给人留下错误的印象
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值