微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

棒棒糖图的刻面包装

如何解决棒棒糖图的刻面包装

我正在建立一个previous question的答案,但是现在我正在努力将其应用于我的问题。我有以下数据:

cluster <- c("Joe","Sam","Bob")
var1 <- c(22.9,0)
var2 <- c(57.8,-25.1)
var3 <- c(45.9,-25.5,63.9)

data <- as.data.frame(
  cbind (cluster,var1,var2,var3)
)

我想对棒棒糖图进行多面包装,其中有3个棒棒糖图,如this page所示,其中每个面都是Joe,Sam和Bob。变量名var1,var2和var3在左侧,每个棒棒糖都是一个段,将每个键值对(Joe-var3 = 45.9)的值连接到中间的零。

图片显示了我要适应的示例。

enter image description here

解决方法

我认为以下代码可以满足您的大部分需求。 您可以调整详细的设置(颜色,背景.....)

library(tibble)
library(tidyr)
library(ggplot2)


data1<-
    tibble(
        cluster=c("Joe","Sam","Bob"),var1=c(22.9,0),var2=c(57.8,-25.1),var3=c(45.9,-25.5,63.9)
    ) %>% 
    pivot_longer(
        cols=c("var1","var2","var3"),names_to="varname",values_to="varvalue"
    )


ggplot(data1) +
    geom_col(aes(y=varname,x=varvalue),fill='seagreen')+
    coord_cartesian(xlim=c(-100,100))+
    facet_wrap(~ cluster)
,

问题是cbind会将所有内容转换为字符变量。

cluster <- c("Joe","Bob")
var1 <- c(22.9,0)
var2 <- c(57.8,-25.1)
var3 <- c(45.9,63.9)

data <- as.data.frame(
  cbind (cluster,var1,var2,var3)
)

str(data)

#>'data.frame': 3 obs. of  4 variables:
#> $ cluster: chr  "Joe" "Sam" "Bob"
#> $ var1   : chr  "22.9" "0" "0"
#> $ var2   : chr  "57.8" "0" "-25.1"
#> $ var3   : chr  "45.9" "-25.5" "63.9"

查看全部转换为chr。 最好像这样使用cbind.data.frame

library(tidyverse)

data <- cbind.data.frame(cluster,var3)

str(data)

#>'data.frame': 3 obs. of  4 variables:
#> $ cluster: chr  "Joe" "Sam" "Bob"
#> $ var1   : num  22.9 0 0
#> $ var2   : num  57.8 0 -25.1
#> $ var3   : num  45.9 -25.5 63.9

现在看到cbind.data.frame保留了数据类型,即,字符作为字符(chr)和数字作为数字(num)。现在进行绘图,您可以使用

data %>% 
  pivot_longer(cols = -cluster,values_to = 'mark') %>% 
  ggplot( aes(x=name,y=mark)) +
  geom_bar(stat="identity",fill="#69b3a2",width=0.6) +
  coord_flip() +
  #theme_ipsum() +
  theme(
    panel.grid.minor.y = element_blank(),panel.grid.major.y = element_blank()
  ) +
  ylab("mark") +
  xlab("") +
  facet_wrap(~cluster)

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。