3

いくつかの密度プロットを重ね合わせて、ggplot2 で図を作成する作業を行っています。一連の年 (この場合は 2004 年から 2012 年) の 12 月ごとのデータ ポイントがあり、12 月と年ごとに密度関数をプロットし、それらを重ねるとします。特定の月の 1 つの密度線を、他のすべてが実線の場所に点線で強調表示したいと思います。以下に再現可能な例を示します。

#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 を使用してみましたが、これは凡例の実際のオブジェクトではなく、アウトラインと背景に対してのみ機能します。12 月の密度

4

2 に答える 2

6

因子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'))

ここに画像の説明を入力

于 2013-01-17T05:51:12.097 に答える
1

黄色は読みにくいですが、これはかなりきれいなバージョンだと思います。

dec.dens1 = ggplot(dec_ema_df, aes(x=dec_ema, group = new)) + 
  geom_density(aes(colour=factor(new), linetype = factor(new)), size = 1, alpha = .70,kernel='epanechnikov') + 
  xlab(NULL) + ylab(NULL) + 
  scale_linetype_manual(values=c('solid', 'solid','solid','solid','dashed','solid','solid','solid'),
                        labels=c('`05','`06','`07','`08','`09','`10','`11','`12')) +
                          scale_colour_manual(values = cbbPalette,labels=c('`05','`06','`07','`08','`09','`10','`11','`12'), name=NULL) +
                          scale_y_continuous(labels = percent) +
                          theme(axis.line = element_line(colour = "black"),
                                panel.grid.major = element_blank(),
                                panel.grid.minor = element_blank(),
                                panel.border = element_blank(),
                                panel.background = element_blank(),
                                legend.title=element_blank(),
                                legend.position = 'bottom', 
                                legend.text = element_text(color= 'black', size = 12, face = 'bold'),
                                legend.key = element_rect(fill = 'white', size = 0.5, linetype='solid'),
                                legend.key.size = unit(1.5, 'lines')) 


print(dec.dens1)

ここに画像の説明を入力

于 2013-01-17T06:50:46.187 に答える