【问题标题】:Facet wrap of a lollipop diagram棒棒糖图的分面包装
【发布时间】:2020-10-10 04:26:21
【问题描述】:

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

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

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

我想制作一个棒棒糖图的分面包装,其中有三个棒棒糖图,例如this page,其中每个方面是 Joe、Sam 和 Bob;变量名 var1、var2 和 var3 位于左侧,每个棒棒糖都是将每个键值对 (Joe-var3 = 45.9) 的值连接到中心的零的段。

图片显示了我正在尝试调整的示例。

【问题讨论】:

    标签: r ggplot2 dplyr tidyverse tidy


    【解决方案1】:

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

    library(tibble)
    library(tidyr)
    library(ggplot2)
    
    
    data1<-
        tibble(
            cluster=c("Joe", "Sam", "Bob"),
            var1=c(22.9, 0, 0),
            var2=c(57.8, 0, -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)
    

    【讨论】:

      【解决方案2】:

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

      cluster <- c("Joe", "Sam", "Bob")
      var1 <- c(22.9, 0, 0)
      var2 <- c(57.8, 0, -25.1)
      var3 <- c(45.9, -25.5, 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.framelike

      library(tidyverse)
      
      data <- cbind.data.frame(cluster, var1, var2, 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)
      

      【讨论】:

        猜你喜欢
        • 2021-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-15
        • 2016-12-26
        • 2015-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多