gpt4 book ai didi

r - 改变个体密度以匹配 ggplot2 中的图例

转载 作者:行者123 更新时间:2023-12-01 10:02:32 27 4
gpt4 key购买 nike

我正在研究叠加几个密度图以在 ggplot2 中创建一个图形。假设我有一系列年份(在本例中为 2004-2012)的每个 12 月的数据点,我想为每个 12 月+年绘制一个密度函数并叠加它们。我想突出显示特定月份的一条密度线,方法是在其他所有密度线都是实线的地方将其设为虚线。我在下面有一个可重现的例子:

#Create vector of data for December 
set.seed(12345)
dec_emas = as.matrix(rnorm(496, 122, 250))

#create indicators for Dec04 ... Dec11, then attach to data frame w/ estimates
declab = c('Dec04', 'Dec05', 'Dec06', 'Dec07', 'Dec08', 'Dec09', 'Dec10', 'Dec11')
declabs = rep(declab, 62)

rownames(dec_emas) = declabs
colnames(dec_emas) = 'EMA'

#add in factor ID for the 8 levels
dec04 = as.numeric(rownames(dec_emas) == 'Dec04')
dec05 = as.numeric(rownames(dec_emas) == 'Dec05')
dec06 = as.numeric(rownames(dec_emas) == 'Dec06')
dec07 = as.numeric(rownames(dec_emas) == 'Dec07')
dec08 = as.numeric(rownames(dec_emas) == 'Dec08')
dec09 = as.numeric(rownames(dec_emas) == 'Dec09')
dec10 = as.numeric(rownames(dec_emas) == 'Dec10')
dec11 = as.numeric(rownames(dec_emas) == 'Dec11')

dec_ema = as.numeric(dec_emas)
dec_ema_df = data.frame(dec_ema, dec04,dec05,dec06,dec07,dec08,dec09,dec10,dec11)

dec_ema_df$new[dec_ema_df$dec04==1]<-4
dec_ema_df$new[dec_ema_df$dec05==1]<-5
dec_ema_df$new[dec_ema_df$dec06==1]<-6
dec_ema_df$new[dec_ema_df$dec07==1]<-7
dec_ema_df$new[dec_ema_df$dec08==1]<-8
dec_ema_df$new[dec_ema_df$dec09==1]<-9
dec_ema_df$new[dec_ema_df$dec10==1]<-10
dec_ema_df$new[dec_ema_df$dec11==1]<-11


#using GGPLOT2...
library(ggplot2)
library('RColorBrewer')


#use different colours for each december
cbbPalette <- brewer.pal(8, "Accent")

#Plot overlaid densities and highlight December 08 with a dashed line.
dec.dens1 = ggplot(dec_ema_df, aes(x=dec_ema, group = new)) +
geom_density(aes(colour=factor(new), linetype = factor(new==8)), size = 1, alpha = .60, kernel='epanechnikov') +
xlab(NULL) + ylab(NULL) +
scale_linetype_manual(values = c('solid', 'dashed'), guide = FALSE) +
scale_colour_manual(values = cbbPalette,
labels= c('Dec `04','Dec `05','Dec `06','Dec `07','Dec `08','Dec `09','Dec `10','Dec `11'),
name= '')


print(dec.dens1)

目前,我能够制作这个。不幸的是,右边的图例显示了 2008 年 12 月的蓝色实线而不是虚线。如何使图例仅对应于 2008 年 12 月的虚线密度线(例如,所有其他图例键都是实线)?我试过使用 legend.key 但这只适用于轮廓和背景,而不适用于图例中的实际对象。 December densities

最佳答案

如果您将因子 new 映射到颜色和线型,并为两个比例指定相同的标签,那么 ggplot 将愉快地自动组合颜色和线型图例:

dec.dens1 = ggplot(dec_ema_df, aes(x=dec_ema, group=new)) + 
geom_density(aes(colour=factor(new), linetype=factor(new)),
size=1, alpha=.60, kernel='epanechnikov') +
xlab(NULL) +
ylab(NULL) +
scale_linetype_manual(values=c('solid', 'solid','solid','solid',
'dashed','solid','solid','solid'),
labels=c('Dec `04','Dec `05','Dec `06','Dec `07',
'Dec `08','Dec `09','Dec `10','Dec `11')) +
scale_colour_manual(values = cbbPalette,
labels=c('Dec `04','Dec `05','Dec `06','Dec `07',
'Dec `08','Dec `09','Dec `10','Dec `11'))

enter image description here

关于r - 改变个体密度以匹配 ggplot2 中的图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372241/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com