我有一個非常簡單(盡管很大)的資料框,其中包含 2 個數字列和 1 個字符分組列,其中包含多個NAs.
我將以此iris為例。下面,我只是NAs在Species我想用于分組和著色的列中引入隨機。
我在這里做的是將Species列重新制作為末尾帶有“NA”(字符)的因子。最后我制作了一個調色板gray,我想對應于“NA”。
data("iris")
set.seed(123)
na_rows <- sample(nrow(iris), 100, replace = F)
iris$Species <- as.character(iris$Species)
iris$Species[na_rows] <- "NA"
mylevels <- iris$Species[which(iris$Species!="NA")]
mylevels <- c(gtools::mixedsort(unique(mylevels)), "NA")
iris$Species <- factor(iris$Species, levels=mylevels)
plot_palette <- c("red","blue","green")
plot_palette <- c(plot_palette[1:length(mylevels)-1], "gray")
到這里一切都好。現在我制作散點圖是這樣的:
grDevices::pdf(file="test1.pdf", height=10, width=10)
P <- ggplot2::ggplot(data=iris, ggplot2::aes(x=Sepal.Length, y=Sepal.Width, color=Species))
ggplot2::scale_color_manual(values=plot_palette)
P1 <- P ggplot2::geom_point(pch=16, size=10, alpha=0.75)
print(P1)
grDevices::dev.off()
這產生了這個情節:

到這里都還好。這很接近我想要的,但是我的實際資料框非常大,很多non-NA點隱藏在這些點后面NA。
為了避免這種情況,我試圖首先繪制NA資料子集,然后在上層繪制資料子集non-NA。我試試下面的代碼:
grDevices::pdf(file="test2.pdf", height=10, width=10)
P <- ggplot2::ggplot(data=iris, ggplot2::aes(x=Sepal.Length, y=Sepal.Width, color=Species))
ggplot2::scale_color_manual(values=plot_palette)
P1 <- P ggplot2::geom_point(data=function(x){x[x$Species == "NA", ]}, pch=15, size=10, alpha=0.75)
ggplot2::geom_point(data=function(x){x[x$Species != "NA", ]}, pch=16, size=10, alpha=0.75)
print(P1)
grDevices::dev.off()
這產生了這個情節:

我在這里遇到的問題非常明顯,但我不知道如何解決它。
我只希望第二個情節與第一個情節完全一樣,除了NA后面有點的“分層” 。我想保持Species圖例中級別的原始順序,NA最后,和相同的顏色對應,NA關聯到gray.
請注意,我還更改了pchforNA點。一個獎勵是讓圖例只有正方形NA(在底部),而其他樣本只有圓圈。
有什么幫助嗎?謝謝!
uj5u.com熱心網友回復:
不需要多層。您可以簡單地重新排序您的資料集,以便NA首先繪制 s 以及您可以Species在shapeaes上映射的形狀并通過scale_shape_manual以下方式設定所需的形狀:
iris1 <- dplyr::arrange(iris, desc(Species))
P <- ggplot2::ggplot(data=iris1, ggplot2::aes(x=Sepal.Length, y=Sepal.Width, color=Species, shape = Species))
ggplot2::scale_color_manual(values=plot_palette)
P ggplot2::geom_point(size=10, alpha=0.75) ggplot2::scale_shape_manual(values = c(16, 16, 16, 15))

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/355826.html
上一篇:防止雙重呼叫刷反應性閃亮?
