簡體   English   中英

ggplot2 中匯總統計的圖例

[英]Legend for summary statistics in ggplot2

這是情節的代碼

library(ggplot2)
df <- data.frame(gp = factor(rep(letters[1:3], each = 10)), y = rnorm(30))
library(plyr)
ds <- ddply(df, .(gp), summarise, mean = mean(y), sd = sd(y))
ggplot(df, aes(x = gp, y = y)) +
   geom_point() +
   geom_point(data = ds, aes(y = mean), colour = 'red', size = 3)

在此處輸入圖像描述

我想為該圖添加一個圖例,用於標識數據值和平均值,類似這樣

Black point = Data
Red point   = Mean.

我怎樣才能做到這一點?

使用手動秤,即在您的情況下scale_colour_manual 然后使用每個 geom 的aes()函數將顏色映射到比例中的值:

ggplot(df, aes(x = gp, y = y)) +
  geom_point(aes(colour="data")) +
  geom_point(data = ds, aes(y = mean, colour = "mean"), size = 3) +
  scale_colour_manual("Legend", values=c("mean"="red", "data"="black"))

在此處輸入圖像描述

您可以將均值變量和數據組合在同一個 data.frame 中,並按列顏色/大小,這是一個因素, datamean

library(reshape2)

# in long format
dsl <- melt(ds, value.name = 'y')
# add variable column to df data.frame
df[['variable']] <- 'data'
# combine
all_data <- rbind(df,dsl)

# drop  sd rows

data_w_mean <- subset(all_data,variable != 'sd',drop = T)

# create vectors for use with scale_..._manual
colour_scales <- setNames(c('black','red'),c('data','mean'))
size_scales <- setNames(c(1,3),c('data','mean') )

ggplot(data_w_mean, aes(x = gp, y = y)) +
  geom_point(aes(colour = variable, size = variable)) +
  scale_colour_manual(name = 'Type', values = colour_scales) +
  scale_size_manual(name = 'Type', values = size_scales)

在此處輸入圖像描述

或者您無法合並,但將列包含在兩個數據集中

dsl_mean <- subset(dsl,variable != 'sd',drop = T)  
ggplot(df, aes(x = gp, y = y, colour = variable, size = variable)) +
  geom_point() +
  geom_point(data = dsl_mean) +
  scale_colour_manual(name = 'Type', values = colour_scales) +
  scale_size_manual(name = 'Type', values = size_scales)

結果相同

暫無
暫無

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

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