简体   繁体   English

position dodge 和 geom_text with faceting 和 positive/negative numbers

[英]position dodge and geom_text with faceting and positive/negative numbers

I need to put labels on top/bottom of the bars as my numbers are both positive and negative (=both sides of x axe).我需要在条形的顶部/底部放置标签,因为我的数字既有正数也有负数(= x 轴的两侧)。

I have been trying to use vjust/hjust with no success so far....到目前为止,我一直在尝试使用 vjust/hjust 但没有成功......

标签

total_merged%>%
      ggplot(aes(factor(NAPLAN_YEAR), value_add_sector_total, fill = model,
                 label = value_add_sector_total
               )) +
      geom_col(position = position_dodge(width = 0.75), width = 0.5) +
      facet_grid(.~sector_report, switch = 'x') +
      scale_fill_manual(NULL, values = c('#1e3763', '#bebebe'), labels = c("Base", "MLSH")) +
      theme_minimal() +
      geom_text(position = position_dodge(width = 0.75), hjust=0.5, vjust = 1.7, #angle = 90, 
                color="darkred")+
          
      labs(title="",
           x ="", y="System 'value add'")+
      theme(legend.position = 'bottom',
          aspect.ratio = 4/3,
            strip.placement = 'outside',
            panel.spacing.x = unit(0, 'mm'),
            axis.title.x = element_blank(),
            panel.grid.major.x = element_blank(),
            panel.grid.minor.y = element_blank(),
            strip.text = element_text(face = 2),
            legend.text=element_text(size=9),
            legend.title=element_text(size=9),
            axis.text= element_text(size = 9, colour = "black")
      )

My data looks like this (first 50):我的数据如下所示(前 50 个):

structure(list(value_add_sector_total = c(-1.38, -1.38, -1.38, 
-1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, 
-1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, 
-1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, 
-1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, 
-1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, -1.38, 
-1.38, -1.38), NAPLAN_YEAR = c(2011, 2011, 2011, 2011, 2011, 
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 
2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 
2011), model = c("base", "base", "base", "base", "base", "base", 
"base", "base", "base", "base", "base", "base", "base", "base", 
"base", "base", "base", "base", "base", "base", "base", "base", 
"base", "base", "base", "base", "base", "base", "base", "base", 
"base", "base", "base", "base", "base", "base", "base", "base", 
"base", "base", "base", "base", "base", "base", "base", "base", 
"base", "base", "base", "base")), row.names = c(NA, -50L), class = c("tbl_df", 
"tbl", "data.frame"))

I can't replicate your code with the data that you provided so I will use a simple data frame.我无法使用您提供的数据复制您的代码,因此我将使用一个简单的数据框。

Using vjust() inside aes() we can use the values from our data.frame without the need to create dummy data:aes()中使用vjust() ) 我们可以使用 data.frame 中的值而不需要创建虚拟数据:

data.frame(V1 = c(20,-30,-40,50), V2 = letters[1:4], V3 = c("A","A","B","B")) |> 
  ggplot(aes(V2, V1, fill = V3)) + 
  geom_col() +
  geom_text(aes(label = V1, vjust = ifelse(V1 > 0, 0, 1)) )

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM