在 ggplot2 中为条形图添加标签/删除 broders

问题描述 投票:0回答:1

我按照这些说明创建了一个瀑布图。

不幸的是,到目前为止我没能做到

  1. 添加标签到条形图 nor
  2. 去除图形的黑色边框。
df <- tribble(
  ~Category, ~Value, 
  # --------- header record ----------
  "Prev Budget", 5,
  "Salaries", 0.1,
  "CapEx", 0.175,
  "Travel", -0.2,
  "Contracting", -0.1,
  "Operations", -0.2,
  "RealEstate", -0.1,
  "Gap to Target", -0.175,
  "Current Budget", -4.5
)

levels <- df$Category

data1 <- df  %>%
  mutate(Category = factor(Category, levels = levels),
         ymin = round(cumsum(Value), 3),
         ymax = lag(cumsum(Value), default = 0),
         xmin = c(head(Category, -1), NA),
         xmax = c(tail(Category, -1), NA),
         Impact = ifelse(Category %in% c(as.character(df$Category[1]), 
                         as.character(df$Category[nrow(df)])),"Budget",
                         ifelse(Value > 0, "Increase", "Decrease")
         ))

g <- ggplot(data1) +
  theme_bw() +
  theme(legend.position = "right", panel.grid = element_blank(), 
        axis.text.x = element_text(angle = 90, vjust = 0.5)) +
  labs(y = "USD Millions", x = "Expense Category", 
    title = "Explanation of Budget Gap Closure")

w <- 0.4  #use to set width of bars

g <- g +
  geom_rect(aes(xmin = as.integer(Category) - w/2,
                xmax = as.integer(Category) + w/2, ymin = ymin, ymax = ymax,
                fill = Impact), colour = "black") +
  scale_x_discrete(limits = levels) +
  scale_fill_manual(values = (c("Decrease" = "blue", "Increase" = "orange", 
                    "Budget" = "black")))

g <- g +
  geom_segment(data = data1[1:(nrow(data1) -1), ], aes(x = xmin,
                                                     xend = xmax,
                                                     y = ymin,
                                                     yend = ymin))
g

我通过论坛进行了搜索,但似乎通常的解决方案在瀑布图中不起作用(例如,panel.border = element_blank())。

r ggplot2 label bar-chart
1个回答
0
投票

要删除面板边框,请使用

theme(panel.border = element_blank())
(不确定为什么它不适合您)。要向图表添加标签,您可以使用
geom_text
。由于您没有指定要添加到图表中的标签以及要放置标签的位置,因此我选择了总计,我将正值放在顶部,负值放在底部:

library(ggplot2)

g +
  geom_text(
    aes(
      x = as.integer(Category),
      y = ymin + if_else(Value > 0, + .1, -.1),
      vjust = if_else(Value > 0, 0, 1),
      label = ymin
    )
  ) +
  theme(panel.border = element_blank())

© www.soinside.com 2019 - 2024. All rights reserved.