Заполните область под кривой - график R - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь заполнить область под кривой графика цветом.Это мои данные:

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)

Но это заполнило область выше, и я не смог найти способ сделать область под.Я также пробую сюжетный пакет, но безуспешно.Я хочу иметь три кривые (WOL ~ EB1; WOL ~ EB2; и WOL ~ EB3) и три соответствующие области с разными цветами.

Не могли бы вы помочь.Большое спасибо, Phuong

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Вы можете gather с dplyr, а затем использовать ggplot:

require(tidyverse)

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

stacked

Обновление (по комментариям)

По умолчанию geom_area() имеет position="stacked", что может привести к искажению значений на оси у.Вы можете использовать position="dodge" вместо или даже geom_polygon() для различных эффектов:

geom_area (position = "dodge")

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

dodge geom_polygon ()

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

polygon

0 голосов
/ 23 мая 2018

Если вам нужен интерактивный сюжет (вы упомянули 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))

enter image description here

Создано в 2018-05-22 с помощью пакета Представление (v0.2.0).

0 голосов
/ 23 мая 2018

Я думаю, вы можете использовать пакет ggplot2 в R для достижения того, что вы просите.Вот код, который создаст график ниже (который, я считаю, именно то, что вы ищете: кривая с заштрихованной областью):

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

enter image description here Doто же самое для EB2 и EB3.

...