簡體   English   中英

為多層ggplot2圖創建任意圖例順序

[英]Create arbitrary legend ordering for multilayer ggplot2 plot

我模擬了以下代碼來提供上下文。 功能,序列間隔,名稱和顏色都是任意的。

library(ggplot2)

function1 <- function(input) {
  input * 3
}

function2 <- function(input) {
 2 * input + 1
}

function3 <- function(input) {
  input + 4
}

x1 <- seq(1, 10, 0.1)
x2 <- seq(1, 10, 0.2)
x3 <- seq(1, 10, 0.5)

y1 <- sapply(x1, function1)
y2 <- sapply(x2, function2)
y3 <- sapply(x3, function3)

data1 <- data.frame(x1, y1)
data2 <- data.frame(x2, y2)
data3 <- data.frame(x3, y3)

ggplot() + 
  geom_point(data = data1, aes(x1, y1, color = "B")) +
  geom_point(data = data2, aes(x2, y2, color = "C")) +
  geom_point(data = data3, aes(x3, y3, color = "A")) +
  scale_color_manual(name = "Functions", 
                     values = c("B" = "Green", "C" = "Red", 
                                "A" = "Blue")) +
  xlab("X") +
  ylab("Y")

這是結果圖的屏幕截圖:

在此處輸入圖片說明

有一些先前回答的問題可以解決圖例排序的類似問題,例如本問題 ,但似乎沒有一個可以解決多層圖。 這個問題解決了0.9.2版的圖例排序,但是ggplot2當前在2.2.1版上 此外,它似乎只處理升序或降序。

我想知道是否可以自定義圖例中值的順序 例如,在圖例中,是否可以將其顯示為B,C,A而不是A,B,C?

“ ggplot2方式”是將數據重整為長格式(或首先以長格式創建數據)。 然后,您只需調用geom_point ,就可以創建一個因子列來對函數進行排序:

dat = data.frame(X=c(x1,x2,x3), 
                 Y=c(y1,y2,y3), 
                 Functions=rep(LETTERS[1:3], sapply(list(x1,x2,x3), length)))

dat$Functions = factor(dat$Functions, levels=c("B","C","A"))

ggplot(dat, aes(X, Y, colour=Functions)) +
  geom_point() +
  scale_color_manual(values=c(B="green", C="red", A="blue")) 

在此處輸入圖片說明

更新:為了回應評論,如果您想添加一個縮寫,則可以使用下面的代碼。 但是,這不僅將為顏色圖例添加新的鍵值,還將為其他三個預先存在的圖例鍵添加一條對角線。

ggplot(dat, aes(X, Y, colour=Functions)) +
  geom_point() +
  scale_color_manual(values=c(B="green", C="red", A="blue", `My Abline`="black")) +
  geom_abline(aes(intercept=0, slope=1, colour="My Abline"))

在此處輸入圖片說明

如果您想要一個單獨的圖例用於邊框,則可以對這些點使用填充美學,僅將顏色圖例保留用於該邊框。 為此,請使用填充的點標記(點標記形狀為21到25)。 在下面的代碼中, stroke=0將刪除填充點周圍的邊框。

ggplot(dat, aes(X, Y, fill=Functions)) +
  geom_point(shape=21, size=2, stroke=0) +
  geom_abline(aes(intercept=0, slope=1, colour="My Abline")) +
  scale_fill_manual(values=c(B="green", C="red", A="blue")) +
  scale_colour_manual(values="black") +
  labs(colour="")

在此處輸入圖片說明

暫無
暫無

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

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