簡體   English   中英

R中具有ggplot2的自定義圖例具有多個密度圖

[英]Custom legend with ggplot2 in R having multiple density plots

我正在嘗試向圖中添加圖例,這是我現在擁有的:

require(ggplot2)
d1 = data.frame(rnorm(100, mean=5))
d2 = data.frame(rnorm(50, mean=7))
single_data = 5.5
max_y = max(max(density(d1[,1])$y), max(density(d2[,1])$y))
print(ggplot() + geom_density(aes(x=d1), colour='black', data=d1, kernel='gaussian', alpha=.1, fill='red') + 
        geom_density(aes(x=d2), colour="black", data=d2, kernel='gaussian', alpha=.1, fill='blue') + 
        geom_segment(aes(x=single_data, xend=single_data, y=0, yend=max_y), colour='blue') +
        xlab("Count") + ylab("Density") + ggtitle('Main Title') +
        theme(legend.position='right') +
        scale_color_manual(name = "Data",
                           labels = c(5, 7),
                           values = c('red', 'blue'))
)

我希望在該圖的右側看到一個圖例,但這是輸出:

代碼樣本輸出

如何為這兩個密度圖添加圖例?

這是非常接近的代碼。 您可以擺弄其余的東西。

library(ggplot2)
set.seed(9)
d1 = data.frame(d1 = rnorm(100, mean=5))
d2 = data.frame(d2 = rnorm(50, mean=7))
single_data = 5.5

xy <- data.frame(d1 = d1, d2 = d2)

library(tidyr)
xy <- gather(xy)

ggplot(xy, aes(x = value, fill = key)) +
  geom_density(kernel = "gaussian", alpha = 0.1) +
  geom_vline(xintercept = single_data)

在此處輸入圖片說明

你可以這樣做:

require(ggplot2)
df <- data.frame(density=c(rnorm(50, mean=5), rnorm(50, mean=7)),
                 name=c(rep('d1', 50), rep('d2', 50)))

single_data = 5.5
max_y = max(max(density(d1[,1])$y), max(density(d2[,1])$y))

p1 <- ggplot(data=df) +
        geom_density(aes(x=density, group=name, colour=name, fill=name), kernel='gaussian', alpha=.5) + 
        geom_segment(aes(x=single_data, xend=single_data, y=0, yend=max_y), colour='blue') +
  scale_color_manual('Legend Name', labels=c('density 1', 'density 2'), values=c('blue', 'green')) +
  scale_fill_manual('Legend Name', labels=c('density 1', 'density 2'), values=c('blue', 'green')) +
        xlab("Count") + ylab("Density") + ggtitle('Main Title') +
        theme(legend.position='right')
p1

在繪制它們之前,您必須先構建體面的數據框。 這就是ggplot優勢的關鍵:p。 在這里,垂直線段不包括在圖例中。 如果希望如此,則必須對線段使用顏色美學,對密度使用填充美學(而不是像示例中那樣對密度使用兩種顏色)。

暫無
暫無

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

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