前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「R」数据可视化16:哑铃图

「R」数据可视化16:哑铃图

作者头像
王诗翔呀
发布2020-07-03 12:07:35
1.6K0
发布2020-07-03 12:07:35
举报
文章被收录于专栏:优雅R

哑铃图(Dumbbell Chart)就像它的名字一样,长得像一个哑铃。当然当你有多个节点的时候,它们还有点像DNA,所以也有人把这种图形称为DNA图。哑铃图是一种很好的可视化方式,比如你想要表征不同指标的不同组的情况你可以用多个“哑铃”表示。另外,你想要表示某一组在外界刺激后的变化情况也可以用这种方式。

我们来看两个例子。第一个例子中比较了成年人和青少年在使用视频游戏设备方面的差异。很直观的可以看到青少年比成年人频率更高,同时在不同设备的使用频率也能看到明显差异。第二个例子,分别显示了最低价格,中间的价格和最高价格,可以看到不同项目的花费差异。

那么在生物研究中我们可以用于表示哪些数据呢?最简单的,当然是有多个指标的时候,我们可以用于显示对照组和实验组的差异。或者是男女之间的差异等等。当然,如果你想显示给予一些刺激,比如用药前后指标的变化,这也是一个选择。另外,现在有很多是多组学的数据,我们会统计志愿者的年龄,或者展示某些生理指标的范围等,所以我们也可以考虑第二个例子,用哑铃图进行展示,这样可能会比图标看起来更加直观一些,也显得更加美观。

怎么做哑铃图

使用ggalt包或者plotly包就可以实现哑铃图的制作。我们选择使用ggalt包(该包基于ggplot2包)。

1)需要什么格式的数据

这次使用一个不同学校男女年收入(单位:千美元)的数据。具体如下:

代码语言:javascript
复制
dat <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/school_earnings.csv")
head(dat)
     School Women Men Gap
1       MIT    94 152  58
2  Stanford    96 151  55
3   Harvard   112 165  53
4    U.Penn    92 141  49
5 Princeton    90 137  47
6   Chicago    78 118  40

一共统计了21所美国高校,包括哈佛、斯坦福、MIT等。

2)如何作图

代码语言:javascript
复制
library(ggplot2)
library(ggalt)

ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
  geom_dumbbell(colour_x = "#FFB6C1",colour_xend = "#4169E1",size_x = 2,size_xend = 2,size=0.5,color="gray")+
  theme_light()+
  theme(panel.grid.minor.x =element_blank(),
        )+
  xlab("Annual Salary (in thousands)")

image.png

当然还可以,进一步修改,比如:添加一个外环

代码语言:javascript
复制
library(ggplot2)
library(ggalt)

ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
  geom_dumbbell(colour_x = "#FFB6C1",colour_xend = "#4169E1",size_x = 2,size_xend = 2,size=0.5,color="gray")+
  geom_point(aes(x=Women,y=School,size=Women),alpha=0.5,color="#FFB6C1")+
  geom_point(aes(x=Men,y=School,size=Men),alpha=0.5,color="#4169E1")+
  theme_light()+
  theme(panel.grid.minor.x =element_blank(),
        legend.position = c("none")
        )+
  xlab("Annual Salary (in thousands)")

又比如再加入Gap的人数:

代码语言:javascript
复制
library(ggplot2)
library(ggalt)

ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
  geom_dumbbell(colour_x = "#FFB6C1",colour_xend = "#4169E1",size_x = 2,size_xend = 2,size=0.5,color="gray")+
  geom_point(aes(x=Women,y=School,size=Women),alpha=0.5,color="#FFB6C1")+
  geom_point(aes(x=Men,y=School,size=Men),alpha=0.5,color="#4169E1")+
  geom_point(aes(x=Gap,y=School),color="#9ACD32",shape=2)+
  theme_light()+
  theme(panel.grid.minor.x =element_blank(),
        legend.position = c("none")
        )+
  xlab("Annual Salary (in thousands)")

也可以换一个风格:

代码语言:javascript
复制
library(ggplot2)
library(ggalt)

ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
  geom_dumbbell(colour_x = "#8B8B7A",colour_xend = "#9ACD32",size_x = 2,size_xend = 2,size=0.5,color="gray",dot_guide = T)+
  theme_light()+
  theme(panel.grid.minor.x =element_blank(),
        panel.grid = element_blank(),
        legend.position = c("none")
        )+
  xlab("Annual Salary (in thousands)")

还可以加入平均值:

代码语言:javascript
复制
library(ggplot2)
library(ggalt)

dat$mean<-apply(dat[,2:3],1,mean)
ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
  geom_dumbbell(colour_x = "#4682B4",colour_xend = "#CD2626",size_x = 3,size_xend = 3,size=0.5,color="gray",dot_guide = T)+
  geom_point(aes(x=mean,y=School),color="#EE7621",size=3)+
  theme_light()+
  theme(panel.grid.minor.x =element_blank(),
        panel.grid = element_blank(),
        legend.position = c("none")
        )+
  xlab("Annual Salary (in thousands)")

然后可以用AI添加一下图例哦

往期精彩:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 怎么做哑铃图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档