簡體   English   中英

ggplot2 geom_text水平分組條形圖上的位置文本

[英]ggplot2 geom_text position text on horizontal grouped barplot

嗨,我正在努力在正確的位置上將標簽放置在成組的水平條形圖中。 我知道以前也有類似的問題,但是我似乎並沒有找到答案。

我的數據(“相關性”)如下所示:

Trait r      se      Disease   significant
1     0.4    0.06    A         *
1     0.1    0.06    B
1     -0.05  0.03    C
2     0.4    0.06    A         *
2     0.1    0.05    B
2     -0.06  0.03    C         *
3     0.04   0.06    A         *
3     0.2    0.05    B         *
3     0.3    0.04    C         *

而我的代碼:

grouped_plot <- ggplot(data=Correlation, aes(x=Trait, y=r, 
fill=Disease)) + geom_bar(stat="identity", position="dodge", 
width=0.9)+ geom_errorbar(aes(ymin = r - se, ymax = r + se), 
width = 0.3, position=position_dodge(0.9), stat="identity", 
color=rgb(100,100,100, maxColorValue = 255)) + coord_flip() +
theme_minimal() +       
scale_y_continuous(breaks=seq(-0.8,0.8,by=0.1)) +  
theme(legend.position="none")  + ggtitle("XXX") + theme(plot.title = 
element_text(size=11) )

grouped_plot + geom_text(aes(x=Trait, y=r + 0.07 * sign(r),      
label=format(significant), hjust=ifelse(r>0,0,1)), 
position=position_dodge(0.9), size=5, color=rgb(100,100,100, 
maxColorValue = 255) )

但是,盡管我調整了參數,但恆星永遠不會垂直居中+每次到誤差線的距離都不同:

在此處輸入圖片說明

在geom_text的y參數中添加“ se”也不會使星星與誤差線的距離相等(對於沿負方向移動的誤差線)

grouped_plot + geom_text(aes(x=Trait, y=r +se + 0.01 * sign(r),      
label=format(significant), hjust=ifelse(r>0,0,1)), 
position=position_dodge(0.9), size=5, color=rgb(100,100,100, maxColorValue  
= 255) )

在此處輸入圖片說明

有人有解決方案嗎? 我會非常感激

在aes的hjust值和aes外的某個angle周圍玩耍

 ggplot(data=d, aes(x=Trait, y=r, fill=Disease)) +
  geom_col(position = position_dodge(width = 0.9), show.legend = F)+ 
  geom_errorbar(aes(ymin = r - se, ymax = r + se), 
                width = 0.3, position=position_dodge(width=0.9)) + 
  coord_flip() +
  scale_y_continuous(breaks=seq(-0.8,0.8,by=0.1)) +  
  theme_minimal() +       
  geom_text(aes(x=Trait, y=r + se + 0.01 * sign(r),      
            label=format(significant)), position=position_dodge(width = 0.9),
            angle =270, hjust=.3)

在此處輸入圖片說明

就像我在上面的評論中提到的那樣,我認為這是一個印刷問題:星號字符設置在一個略微的上標中,因此它徘徊在您期望它所在的中心線上方。 我沒有使用該特定字符,而是嘗試使用geom_point來獲得比geom_text更多的控制geom_text ,然后將重要性變量映射為shape。 我略微更改了數據,以使is_sig列將具有每次觀察的值,因為當存在NA值時,我很難使事情排成一列(使躲避變得困難)。

我使用的另一個技巧是考慮到符號,將其定位在錯誤欄的外面。 我設置了一個可變gap以使每個恆星保持一致的偏移量,然后在geom_point ,將y位置計算為r加上或減去標准誤差+間隙。

亂成一團的形狀; 這是我能很快得到的最接近您的星號的位置,但是您可以放一個Unicode字符代替。 在Mac上,我可以很容易地獲得一個星形字符,但是您需要一個額外的步驟才能使該Unicode字符顯示在繪圖中。 還要檢查形狀參考

geom_point ,設置show.legend = F以防止這些點顯示在圖例中。 或忽略它,並創建形狀圖例以顯示星號的含義。 請注意警告,這些NA形狀已被刪除。

library(dplyr)
library(readr)
library(ggplot2)

# ... reading data

df2 <- df %>%
  mutate(is_sig = ifelse(is.na(significant), "not significant", "significant"))

gap <- 0.01

ggplot(df2, aes(x = as.factor(Trait), y = r, fill = Disease, group = Disease)) +
  geom_col(position = position_dodge(width = 0.9), width = 0.9) +
  geom_errorbar(aes(ymin = r - se, ymax = r + se), position = position_dodge(width = 0.9), width = 0.3) +
  geom_point(aes(shape = is_sig, y = r + sign(r) * (se + gap)), position = position_dodge(width = 0.9), 
             size = 2, show.legend = F) +
  coord_flip() +
  scale_shape_manual(values = c("significant" = 8, "not significant" = NA))
#> Warning: Removed 3 rows containing missing values (geom_point).

reprex軟件包 (v0.2.0)創建於2018-07-30。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM