我有一個大資料集,可以使用下面的 mwe 來舉例說明
df <- data.frame("x" = c(1,1,1,2),"value" = c(4,3,5,1), "groupA" = c("A","B","A","B"), "groupB" = c("X","Y","Y","Y"))
df$value <- ifelse(df$groupB == "Y", -df$value, df$value)
我需要繪制這個圖,其中一組產生填充,另一組產生填充,無論它是在 x 軸上方還是下方。這可以按如下方式完成:
ggplot(df,aes(x=x,y=value,fill=groupA))
geom_bar(stat="identity")
這產生了每個 groupB 中高于和低于零的值的總和,并對條形進行了很好的顏色編碼:
Mwe條形圖

但是,我還需要將每個實體中的計數列印為每個條形上方的標簽。像這樣使用
如您所見,標簽的位置由計數定義。我嘗試設定y=value, 或y=5(作為示例),但這會導致錯誤訊息。
我該如何解決這個問題?
(在 zx8754 回復后編輯)
uj5u.com熱心網友回復:
我的意思是,它不漂亮,但它有效......
library(dplyr)
library(ggplot2)
df %>%
group_by(x) %>%
mutate(count = ifelse(row_number() == 1, n(), NA)) %>%
ggplot(aes(x = x, y = value,fill = groupA))
geom_col()
geom_text(aes(label = count, x = x, y = value))
回傳:

uj5u.com熱心網友回復:
如果我正確理解問題,我們可以使用微調:
ggplot(df,aes(x=x,y=value,fill=groupA))
geom_bar(stat="identity")
geom_text(aes(label=..count..,group=x,y=..count..),
nudge_y = c(1.4,3.3), stat="count")

uj5u.com熱心網友回復:
當我們將一些值翻轉為負數時,計數將與文本位置不匹配,因此我們手動為文本定義新的 y 值:
library(ggplot2)
library(dplyr)
df %>%
group_by(X = as.factor(x)) %>%
mutate(Y = ifelse(groupB == "Y", -value, value),
label = n(),
Ylabel = sum(Y[ Y > 0 ])) %>%
ggplot(aes(x = X, y = Y, fill = groupA))
geom_bar(stat = "identity")
geom_text(aes(y = Ylabel, label = label), vjust = -0.5)

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/328487.html
上一篇:洗掉圖例中的空間(ggplot)
