簡體   English   中英

在 ggplot2 - 使用 xlim() 控制 x 軸時,如何確保 geom_errorbar 顯示所有點的條形限制

[英]In ggplot2 - how to ensure geom_errorbar displays bar limits for all points when controlling x-axis with xlim()

我正在使用ggplot2生成一個相對於整數值預測變量的相當簡單的比例圖。 我正在使用 geom_errorbar 來顯示每個點估計的不確定性。

例如

require(ggplot2)
mydata <- data.frame(my_x = 70:99, 
                     my_y = seq(0.7,0.3,length.out=30), 
                     my_lower = seq(0.6,0.2,length.out=30), 
                     my_upper = seq(0.8,0.4,length.out=30))

ggplot(mydata,aes(x=my_x)) + geom_point(aes(y=my_y)) +
                           geom_errorbar(aes(ymin=my_lower, ymax=my_upper)) +
                           xlim(70,80)

出於美學原因,我使用 xlim() 來設置 x 軸限制(就像你一樣)。 但這會刪除指示最小和最大 x 值處誤差線限制的水平線。 我認為這是因為ggplot2試圖繪制一條位於繪圖區域之外的線(函數調用從geom_path打印一些關於缺失值的警告)。

壞蛋圖

我可以事先清理不需要的行的數據,或者在ggplot調用中包含一個subset語句,但我覺得在放大繪圖時有/應該是一個更清潔的解決方案。 有任何想法嗎?

有點hacky,但它似乎有效:

ggplot(mydata,aes(x=my_x)) + geom_point(aes(y=my_y)) +
                           geom_errorbar(aes(ymin=my_lower, ymax=my_upper)) +
                           coord_cartesian(xlim=c(69.5,80.5))

您可以嘗試減小誤差線的寬度。

ggplot(mydata,aes(x=my_x)) + geom_point(aes(y=my_y)) +
                           geom_errorbar(aes(ymin=my_lower, ymax=my_upper),width=0.25)

使用日期刻度執行此操作時遇到了類似的問題,我在其中指定了以下參數:

scale_x_date(date_labels="%Y %B", 
               date_breaks = "1 month",
               limits=as.Date(c("2020-03-01", "2021-11-01"), format="%y-%m-%d"),
               )

最終解決了這個問題:

scale_x_date(date_labels="%Y %B", 
                   # date_breaks = "1 month",
                   limits=as.Date(c("2020-03-01", "2021-11-01"), format="%y-%m-%d"),
                   breaks = seq(as.Date("2020-03-01"), as.Date("2021-11-01"), by="months"))

暫無
暫無

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

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