[英]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_x
或free_y
)時,每個子圖的比例將根據比例的長度設置。 當只有NA時,無法確定比例的長度,從而導致錯誤信息。
這就是為什么free_x
可以工作的原因(雖然它給出了相同的結果)。
總結:當你的一個組只有NA時,你不能在你的情節中使用scales="free"
。 因此,您有兩種選擇(在我看來):
scales="free"
參數以獲得所需的空子圖。 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.