曲线下的填充区域 - 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 做同样的事情。
您可以 gather
与 dplyr
,然后使用 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。
我正在尝试用颜色填充绘图曲线下方的区域。这是我的数据:
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
您可以 gather
与 dplyr
,然后使用 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)
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。