R语言可视化作图笔记(2)感知与可视化预处理

感知与可视化预处理

不同的散点图(ggplot2)

还是以ggplot2里的mpg为例,第一幅只设置xycolor三个参数。由于displnumeric类型的数据,所以第一幅图中的colorbar是渐变的(continuous)

library(ggplot2)
data0 <- mpg
ggplot(data0) +
  geom_point(aes(x=hwy, y=cty, color =displ))

在这里插入图片描述
我们用cut_interval分割displ为4个不同的区间,此时变量groups就是factor类型,作图会有很大不同,colorbar的呈现为discrete的

注意!在作图时无论是颜色大小等,一定注意“原”数据的类型!倘若原数据象征不同的地点车型款式等,作图的colorbar却画成了continuous(上图),那么这就是可视化的错误。应将数据先改成factor再作图

groups <- cut_interval(data0$displ,4)
ggplot(data0) +
  geom_point(aes(x=hwy, y=cty, color =groups))

在这里插入图片描述
作为对比,我们也可以通过比较大小,线条的方向(geom_spoke我也不是很懂,以后补充)的方式作图

groups <- cut_interval(data0$displ,4)
ggplot(data0) +
  geom_point(aes(x=hwy, y=cty, size =groups))
  
ggplot(data0,aes(x=hwy, y=cty)) +
  geom_point()+
  geom_spoke(aes(angle=as.numeric(groups), radius = 0.8))

【此图超级丑就是了。。。也就是可视化方法与数据不兼容】
在这里插入图片描述
在这里插入图片描述
为什么渐变色(亮度),不同色(色调),大小,方向,甚至形状和线的长短给人的感觉不一样呢?因为人的感知对于以上这些东西的变化是不同的,英文上称此为perception metrics(感知量度?)。

当我们的大脑要处理图像时,分preattentive和attentive。preattentive是大脑本能的对图像进行处理,就像对第二张图的红蓝绿紫进行分类一样。大部分人能够同时处理的容量(Channel capacity)为 8 levels = 3 bits

以下是通常人对不同量度的最大容量:

  • 线上的点坐标: 10-15 levels (3.25 bits)
  • 平面上的大小: 4-5 levels (2.2 bits)
  • 颜色: 色调 10 levels, ;亮度: 5 levels (3.1 bits, 2.1 bits)
  • 线长: 2.8 bits
  • 线的方向: 3 bits
  • 线的弯度: 1.6-2.2 bits

另外要注意的,两个不同量度相加(Conjuction)并不能直接增加总量度,例如
色调+饱和度: 3.6 bits
大小+色调+亮度: 4.1 bits
平面上的坐标: 4.6 bits

根据Treisman’s theory,在preattentive时,每一个感知量度都可以看作有一个独立的feature map,图像会在这样的数个map中并行处理。但是处理复合量度(Conjuction)时,由于需要在其他map中串联搜索,通常更加耗时。
【总之就是复合的和单一的其实毛关系都没有=。=】
在这里插入图片描述
这是一幅笔者作业中的图,就有很多多余的图像处理
在这里插入图片描述

饼图(plotly)

下面来说明一个可视化中经常出现的错误。此例,我们统计了所有mpg中所有车的牌子,用饼图查看其比例。我们还用textinfo="none"隐去了图上的标签。

library(plotly)
names <- as.character(unique(mpg$manufacturer))
num <- rep(0, length(names))
for(i in 1: length(num)){
  idx <- mpg$manufacturer==names[i]
  num[i] <- sum(idx)
}
ncyl=num/sum(num)*100
df <- as.data.frame(cbind(names,ncyl))
df[,2] <- as.numeric(as.character(df[,2]))
plot_ly(df, labels=~names, values=~ncyl, textinfo="none") %>% 
  add_pie()

图上蓝色为15.8%,橙色为14.5%,绿色为11.5%,紫色为10.7%,但由于人对角度的感知非常弱,很多人会觉得绿色与橙色蓝色相当,且远大于紫色。这就是可视化选图中的误导(misleading)。
【倘若做成斜视的饼图,问题就更大了】
在这里插入图片描述
相较之下,柱状图会是更好的选择。由于画柱状图的x会默认按照字母表或者factorlevels排序,需要给df的第一列设置新的levels

t <- df[order(df[,2], decreasing = TRUE),]    #按照第二列降序排第一列
ord <- as.character(t[,1])                    #得到第一列的 字符向量
t[,1] <- factor(t[,1],levels = ord)         #将此向量设为新的levels
plot_ly(t, x=~names, y=~ncyl) %>% 
  add_bars()

在这里插入图片描述

2D密度图(ggplot2)

2D密度图的缺点主要两点:

  1. 高密度地区对整图的影响过大,使得低密度地区不可视。热度图也有这种问题。可以用数据预处理解决,例如用scale将数据标准化
  2. “山脊”部分会有误导,使得读者误以为此处有很多点分布
ggplot(data0, aes(x= hwy, y= cty))+
  stat_density_2d(aes(fill = ..level..), 
                  geom = "polygon", 
                  color="white", alpha=0.5 )+
  geom_point()

在这里插入图片描述

散点图(plotly)

plotly画散点图,model在作图中没有提到,可用hovertext添加所选点的信息

plot_ly(mpg[1:74,], x=~hwy, y=~cty,
        type="scatter", hovertext=~paste0(model), 
        color= ~manufacturer)

在这里插入图片描述
ggplot2::facet_wrap画并列图

a<-ggplot(mpg[1:74,],aes(x=hwy, y=cty,color= manufacturer))+
  geom_point()+
  facet_wrap(~manufacturer)
ggplotly(a)

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值