R语言 如何使用ggplot2在轴标签上显示层次结构?

i5desfxk  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(114)

我想用ggplot2:

创建一个这样的图
(我在这里犯了一个小错误,导致所有标签都没有显示出来。显然我希望所有标签都显示出来:))然而,我的谷歌搜索没有找到任何东西。我最接近的是来自ploconut的barNest,然而,我不喜欢生成的图形的质量。ggplot2的看起来好得多。
在理想的情况下,我希望能够做这样的事情:尺度x离散(“Axis Title”,labels=Level1+Level2+Level3)然后Level1,Level2和Level3将是qplot函数中使用的数据框的列。如果我能让这个工作,我想创建一个函数来将这种类型的功能添加到scales函数中。也许scale_x_hierarchical会更好。可以使用以下代码生成类似的数据:

data <- data.frame(
  Subject = c(rep(1, 48), rep(2, 48), rep(3, 48), rep(4, 48)), 
  month = rep(c(rep(1, 12), rep(4, 12), rep(7, 12), rep(10, 12)), 4), 
  day = rep(c(rep(1, 4), rep(11, 4), rep(21, 4)), 16), 
  hour = rep(c(0, 6, 12, 18), 48), 
  data = rnorm(192))

字符串
顺便说一下,这里使用的图像是用Spotfire创建的。

8ulbf1ek

8ulbf1ek1#

这有点不同,但LearnR博客有一个post链接表到图,所以它看起来像这样:


的数据

chy5wohz

chy5wohz2#

很难理解你想从这个数据表示中得到什么信息。另外请注意,在一个名为data的对象中有一个名为“data”的列是不好的做法。我已经将列重命名为“results”。
要使用ggplot实现类似的效果,您可以使用facet_wrapfacet_grid化属性来实现一般的嵌套效果:

data %>% 
  mutate(date = map2(month, day, ~ymd(str_c("2023", .x, .y, sep = "-")))) %>% 
  unnest(date) %>% 
  ggplot()+
  geom_bar(aes(x = hour, y = result, 
               fill = as.factor(Subject)), 
           stat = "identity", position = "dodge")+
  labs(x = "Month/Day/Hour", fill = "Subject")+
  facet_wrap(~day(date)+format(date, "%B"), strip.position = "bottom",nrow = 1)+
  theme_bw()+
  theme(
    strip.placement = "outside",
    strip.background.x = element_blank(),
    strip.text.x = element_text(size = 8))

字符串


的数据
这里我使用了facet_wrap,并在函数中指定了我希望标签位于图的底部(strip.position = "bottom")。为了更接近上图,我还指定了我希望面只绘制在一行(nrow = 1)中。
theme()中的参数控制面带文本在轴外部的位置、填充和文本大小。

相关问题