簡體   English   中英

ggplot2中同一圖例中的不同圖例鍵

[英]Different legend-keys inside same legend in ggplot2

假設我不需要“適當的”變量映射,但仍希望使用圖例鍵來幫助理解圖表。 我的實際數據類似於以下df

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

library(ggplot2)

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))

在此處輸入圖片說明

基本上,我希望相對於points的圖例鍵是......只是一個點,中間沒有線。 我接近了這個:

library(reshape2)

df <- melt(df, id.vars="id")

ggplot() +
  geom_point(aes(id, value, shape = variable), df[df$variable=="points",]) +
  geom_line(aes(id, value, colour = variable), df[df$variable=="line",])

但它定義了兩個單獨的圖例。 修復第二個代碼(並且必須重塑我的數據)也可以,但我更喜歡一種方法(如果有的話)來手動更改任何圖例鍵(並繼續使用第一個方法)。 謝謝!

編輯 :

謝謝@alexwhan,你刷新了我對變量映射的記憶。 但是,到目前為止,我最簡單的方法仍然是以下(非常糟糕的黑客!):

df <- data.frame(id = 1:10, line = rnorm(10), points = rnorm(10))

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, shape = "points")) +
  theme(legend.title=element_blank())

這只是隱藏了兩個不同傳說的標題。

在此處輸入圖片說明

其他想法更受歡迎!!!

您可以在guides()函數中使用override.aes=來更改圖例的默認外觀。 在這種情況下,您的指南是color= ,然后您應該設置shape=c(NA,16)以刪除線的形狀,然后linetype=c(1,0)從點刪除線。

ggplot(df) +
  geom_line(aes(id, line, colour = "line")) +
  geom_point(aes(id, points, colour = "points"))+
  guides(color=guide_legend(override.aes=list(shape=c(NA,16),linetype=c(1,0))))

在此處輸入圖片說明

我不知道有什么方法可以輕松做到這一點,但你可以做一個這樣的黑客版本(使用你融化的數據框):

p <- ggplot(df.m, aes(id, value)) +
  geom_line(aes(colour = variable, linetype = variable)) + scale_linetype_manual(values = c(1,0)) +
  geom_point(aes(colour = variable, alpha = variable)) + scale_alpha_manual(values = c(0,1))

在此處輸入圖片說明

關鍵是您需要獲得正確的映射才能使其在圖例中正確顯示。 在這種情況下,讓它“正確”,意味着愚弄它看起來像你想要的樣子。 可能值得指出這僅適用,因為您可以將linetype設置為空白 (0),然后對點使用alpha比例。 您不能對兩者都使用alpha ,因為它只需要一個比例。

暫無
暫無

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

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