将多个功能组合成一个图(ggplot)

时间:2018-04-17 13:43:44

标签: r ggplot2

我有一个(25x6)矩阵,包含以下观察结果(类:dataframe):

Mkt.RF   SMB   HML   RMW   CMA    WML
-3.86  1.37  1.14  1.47 -2.35   0.05
 1.10 -0.95 -1.60  1.17 -0.33  -2.96
 2.44 -1.79  0.39  1.14 -2.31  -1.55
 9.10  2.48  0.01 -1.43 -0.12  -7.61
-2.37  2.90 -0.84  0.84 -1.22   1.81
 0.54  0.09  0.48  0.30  0.32   0.03
 0.72 -0.48  0.40  0.20 -0.12   0.87
-6.09  1.57  1.04  1.05  0.43   1.13
 3.43 -1.63 -0.55  1.45 -0.63   3.35
-1.35  0.32 -0.59  1.57 -0.80   3.43
 2.90  0.52  0.00 -0.26  0.39   1.56
 1.35 -0.22 -1.42 -1.58  0.19   2.25
-5.10  0.77 -1.34  1.21 -0.35   1.06
 6.26 -1.91 -2.70  1.89 -1.94   3.01
-2.21  4.04  3.00 -0.07  1.09   0.38
-1.93  2.50  1.88  0.53  1.13   1.26
-5.48  1.04  2.45  0.79  0.61   0.90
-0.11 -1.34  2.59  3.32  2.21   0.10
 4.13  0.15  0.66 -1.51  1.13  -0.18
-3.72  0.76  0.92  0.87  0.42   2.96
-0.64 -2.35 -1.31  0.27  0.55   0.94
 2.52 -2.70 -1.71 -0.16  0.86  -3.55
-1.41 -0.20 -0.96  0.47 -0.25   2.56
-3.08 -0.45 -0.35  0.23 -2.21   1.55
 1.78 -0.19 -1.64 -0.10 -1.17   0.69

我希望产生两个图:(1)概率密度函数,以及(2)ggplot中的累积分布函数。我想为每列提供一个函数,因此应该有6个pdfs和6个cdfs。我制作了以下内容:

Loaddata <- setwd("~/Desktop")

library(ggplot2)
library(plyr)
library(reshape2)

D <- read.table(file = "MyData.csv", header = TRUE, sep =";", dec = ",")
attach(D)
factors <- cbind(D[,2:7])

ggplot(faktors, aes(Mkt.RF)) + geom_density() + labs(x = "Return", y =     "Distribution", title = "PDF")+
xlim(-20,20) + theme(plot.title = element_text(hjust = 0.5))   

有了这个,我可以用单个函数(一列数据)生成一个图,但是我将所有六个函数组合成一个图时遇到了麻烦。所以我可以复制类似的东西:

PDF functions example

提前谢谢!

2 个答案:

答案 0 :(得分:0)

你可以尝试

library(tidyverse)
df %>% 
  bind_rows(df, .id="gr") %>% 
  gather(key, value, -gr) %>% 
  ggplot() + 
   geom_density(data = . %>% filter(gr == 1), aes(value, color = key), size=1.1) +
   stat_ecdf(data = . %>% filter(gr == 2), aes(value, color = key), size=1.1) +
   facet_wrap(~gr, labeller = labeller(gr=c("1" = "PD", "2" = "CD"))) 

enter image description here

可以使用

创建单个图
df %>% 
  gather(key, value) %>% 
  ggplot(aes(value, color=key)) + 
  geom_density() 

答案 1 :(得分:0)

以下是使用mtcars的可重现示例,并将所有分布绘制在彼此之上

library(tidyverse)

mtcars %>%
  gather(Variable, Value) %>%
  ggplot(aes(x=Value, color=Variable)) +
  geom_density(alpha=0)

output plot