【问题标题】:R - Barplot where one subset of a variable is the fill and one subset is the y-axis?R - 变量的一个子集是填充,一个子集是 y 轴的条形图?
【发布时间】:2018-10-12 16:15:51
【问题描述】:

我想在 x 轴上绘制 xExp 和 yExp,将 Yes/Nos 作为堆叠填充,将 xDur、yDur 作为 y 轴。这可能吗? Exp = 经验,Dur = 持续时间。

这是我最近尝试过的:

ggplot(md1,aes(variable,value,fill=str_detect("Exp")))+
geom_bar(stat="identity")

我融化了数据框并对其进行了过滤,现在它看起来如下所示。我有比这更多的 Exp 和 Dur 值,将它们保留为单独的列是否有意义?

md1 <- md %>% 
filter(str_detect(variable, paste(c("Exp","Dur"),collapse = '|')))

Subject variable    value
1   xExp    Yes
2   xExp    No
3   xExp    Yes
4   xExp    Yes
5   xExp    No
1   xDur    2
2   xDur    NA
3   xDur    1
4   xDur    10
5   xDur    NA
1   yExp    No
2   yExp    No
3   yExp    Yes
4   yExp    Yes
5   yExp    No
1   yDur    NA
2   yDur    5
3   yDur    8
4   yDur    2
5   yDur    NA

感谢您的帮助!我一直在这里搜索,找不到我真正需要的东西,但也许我在寻找错误的东西。

【问题讨论】:

标签: r ggplot2 dplyr


【解决方案1】:
txt <- tibble::tribble(
  ~Subject,~variable,~value,
           1,   "xExp"   , "Yes",
            2,   "xExp"  ,  "No",
           3 ,  "xExp"   , "Yes",
           4 ,  "xExp"   , "Yes",
            5  , "xExp"  ,  "No",
             1,   "xDur" ,   "2",
            2 ,  "xDur"  ,  "NA",
             3,   "xDur" ,   "1",
            4 ,  "xDur"  ,  "10",
            5 ,  "xDur"  ,  "NA",
            1 ,  "yExp"  ,  "No",
            2 ,  "yExp"  ,  "No",
           3  , "yExp"   , "Yes",
           4  , "yExp"  ,  "Yes",
            5 ,  "yExp"  ,  "No",
            1 ,  "yDur"  ,  "NA",
             2 ,  "yDur"  ,  "5",
             3 ,  "yDur" ,   "8",
             4 ,  "yDur"  ,  "2",
            5  , "yDur"   , "NA"
  )

我想知道这是否是你所追求的

library(tidyr)
library(dplyr)
library(ggplot2)    

df <- txt %>% 
  mutate(variable=gsub("([[:lower:]])([[:upper:]][[:lower:]])", "\\1 \\2", variable)) %>% 
  separate(variable, into=c("xy", "what")) %>% 
  spread(what, value) %>% 
  readr::type_convert() 

df
#> # A tibble: 10 x 4
#>    Subject xy      Dur Exp  
#>  *   <dbl> <chr> <int> <chr>
#>  1       1 x         2 Yes  
#>  2       1 y        NA No   
#>  3       2 x        NA No   
#>  4       2 y         5 No   
#>  5       3 x         1 Yes  
#>  6       3 y         8 Yes  
#>  7       4 x        10 Yes  
#>  8       4 y         2 Yes  
#>  9       5 x        NA No   
#> 10       5 y        NA No   

所以图表看起来像这样

ggplot(df)+
  geom_col(aes(x=xy, y=Dur, fill=Exp))

【讨论】:

  • 是的,这正是我的意思!一个问题是,并非所有变量名称都是 1 个字母(xExp,yExp),有些可能是 AbExp 等。有没有办法使用 sep 根据大小写进行解析?谢谢!
  • 我更正了代码以帮助在大写字母前插入空格,然后在上面分隔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多