簡體   English   中英

facet_grid和scales =“free”的行為,缺少數據

[英]Behaviour of facet_grid and scales=“free” with missing data

有人可以解釋為什么這有效:

 d <- data.frame(x = 1:10, y = as.numeric(c(1:4,rep(NA,6))),z=rep(1:5,2))
 ggplot(data = d, aes(x, y)) + geom_point() +facet_grid(z~.)

scales="free"添加到facet_grid會拋出錯誤:

 d <- data.frame(x = 1:10, y = as.numeric(c(1:4,rep(NA,6))),z=rep(1:5,2))
 ggplot(data = d, aes(x, y)) + geom_point() +facet_grid(z~.,scales="free")

# Error in seq.default(from = best$lmin, to = best$lmax, by = best$lstep) : 
#  'from' must be of length 1

scales不自由時,它可能會使用所有刻面的最小值和最大值。 scales是免費的時,它不知道對僅包含缺失的方面采取哪個值?

有解決方法嗎?

我看了兩個解決方案。

1)

ggplot(data = d, aes(x, y)) + 
  geom_point() +
  facet_grid(z~.,scales="free_x")

有效,但給出與沒有scales="free"部分相同的結果。

2)

library(gridExtra)
p1 <- ggplot(data = d[d$z==1,], aes(x, y)) + geom_point()
p2 <- ggplot(data = d[d$z==2,], aes(x, y)) + geom_point()
p3 <- ggplot(data = d[d$z==3,], aes(x, y)) + geom_point()
p4 <- ggplot(data = d[d$z==4,], aes(x, y)) + geom_point()
p5 <- ggplot(data = d[d$z==5,], aes(x, y)) + geom_point()
grid.arrange(p1,p2,p3,p4,p5,ncol=1)

這不起作用。 單獨繪制圖表時,您會發現p5無法繪制。 這是因為z=5 y只有NA。

當只有NA時嘗試使用自由比例是不合邏輯的。 在我看來,這是一個概念性問題 這樣做的原因是,如果不使用scales="free"參數,則使用其他子圖的比例。 當使用scales="free"參數(或free_xfree_y )時,每個子圖的比例將根據比例的長度設置。 當只有NA時,無法確定比例的長度,從而導致錯誤信息。

這就是為什么free_x可以工作的原因(雖然它給出了相同的結果)。

總結:當你的一個組只有NA時,你不能在你的情節中使用scales="free" 因此,您有兩種選擇(在我看來):

  • 省略scales="free"參數以獲得所需的空子圖。
  • 將NA替換為0 ,但這只是沒有負值時的解決方案。

你也可以使用na.omit(數據幀)。 這對我有用。 我在722K行數據中只有一個(!)NA。 這足以得到這個錯誤。

我們可以解決這個問題,而來源是我們使用的是Capital X而不是公式中的小x,錯誤的是:ggplot(isotidy,aes(X = site,y = dN_fish,fill = site))+ geom_boxplot()並且應該如下所示:ggplot(isotidy,aes(x = site,y = dN_fish,fill = site))+ geom_boxplot()

我希望這有幫助

暫無
暫無

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

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