曲线下的填充区域 - R 图

Fill area under the curve - R plot

我正在尝试用颜色填充绘图曲线下方的区域。这是我的数据:

WOL EB1 EB2 EB3
-4  -9.61818    5.38182 15.38182
-3  -11.75152   3.24848 13.24848
-2  -13.01212   1.98788 11.98788
-1  -16.16364   -1.16364    8.83636
1   -33.8606    -18.8606    -8.8606
2   -27.897 -12.897 -2.897
3   -25.4242    -10.4242    -0.4242
4   -23.09697   -8.09697    1.90303
5   -21.01212   -6.01212    3.98788
6   -18.73333   -3.73333    6.26667
7   -16.45455   -1.45455    8.54545
8   -16.06667   -1.06667    8.93333
9   -15.193939  -0.193939   9.806061
10  -14.175758  0.824242    10.824242
11  -12.13939   2.86061 12.86061
12  -11.84848   3.15152 13.15152

我的代码是:

cord.x <- c(eb$WOL)
cord.y <- c(eb$EB1)
polygon(cord.x,cord.y,col='red',border = NA)

但是这个填充上面的区域,我找不到做下面区域的方法。 我也尝试 plotly 包但没有成功。 我的愿望是三个曲线(WOL~EB1;WOL~EB2;和WOL~EB3)和三个不同颜色的对应区域。

你能帮忙吗。 非常感谢, 芳

我认为您可以使用 R 中的 ggplot2 包来实现您的要求。这是将生成下面图的代码(我相信这就是您正在寻找的:一条曲线,其下的区域有阴影):

data<-data.frame(cbind(WOL,EB1,EB2,EB3))
library(ggplot2)
g<-ggplot(data=data,aes(x=WOL,y=EB1))+
  geom_line() + 
  geom_ribbon(data = data[data$WOL<max(data$WOL),],aes(x=WOL,ymax=EB1),ymin=0,fill="red", alpha=0.5)+
  ggtitle("WOL vs EB1")+
  theme(plot.title = element_text(hjust=0.5))
g

对 EB2 和 EB3 做同样的事情。

您可以 gatherdplyr,然后使用 ggplot:

require(tidyverse)

df %>%
  gather(iv, value, -WOL) %>%
  ggplot(aes(x=WOL, y=value)) +
  geom_area(aes(fill=iv))

更新(根据评论)

默认情况下,geom_area()position="stacked",这可能会使值看起来在 y 轴上扭曲。您可以使用 position="dodge",甚至 geom_polygon(),以获得不同的效果:

geom_area(位置="dodge")

df %>%
  gather(iv, value, -WOL) %>%
  ggplot(aes(x=WOL, y=value, fill=iv)) +
  geom_area(position=position_dodge(0), alpha=.7)

geom_polygon()

df %>%
  gather(iv, value, -WOL) %>%
  ggplot(aes(x=WOL, y=value, fill=iv)) +
  geom_polygon()

如果你想要交互式情节(你提到了plotly),这里有一个使用highcharter

的解决方案
library(tidyverse)
library(highcharter)

eb <- read.table(text = "WOL EB1 EB2 EB3
                  -4  -9.61818    5.38182 15.38182
                 -3  -11.75152   3.24848 13.24848
                 -2  -13.01212   1.98788 11.98788
                 -1  -16.16364   -1.16364    8.83636
                 1   -33.8606    -18.8606    -8.8606
                 2   -27.897 -12.897 -2.897
                 3   -25.4242    -10.4242    -0.4242
                 4   -23.09697   -8.09697    1.90303
                 5   -21.01212   -6.01212    3.98788
                 6   -18.73333   -3.73333    6.26667
                 7   -16.45455   -1.45455    8.54545
                 8   -16.06667   -1.06667    8.93333
                 9   -15.193939  -0.193939   9.806061
                 10  -14.175758  0.824242    10.824242
                 11  -12.13939   2.86061 12.86061
                 12  -11.84848   3.15152 13.15152",
                 header = TRUE)

eb %>% 
  gather(iv, value, -WOL) -> eb_long
str(eb_long)
#> 'data.frame':    48 obs. of  3 variables:
#>  $ WOL  : int  -4 -3 -2 -1 1 2 3 4 5 6 ...
#>  $ iv   : chr  "EB1" "EB1" "EB1" "EB1" ...
#>  $ value: num  -9.62 -11.75 -13.01 -16.16 -33.86 ...

hchart(eb_long, "polygon", hcaes(x = WOL, y = value, 
                                 group = iv,
                                 color = iv, 
                                 fill  = iv))

reprex package (v0.2.0) 创建于 2018-05-22。