在坐标系中确定两条有着相同X轴坐标的曲线,然后把它们中间的区域涂上颜色,这便是geom_ribbon的工作机制。而geom_area则是geom_ribbon的特例:它把X轴当成两条折线中的一条。
library(ggplot2)
## geom_ribbon
x=1: 5; y1=1: 5; y2=2: 6
ggplot()+geom_ribbon(aes(x=x, ymin=y1, ymax=y2), fill="red", color="purple", size=2)
## geom_area
x=seq(-3, 3, 0.1); y=dnorm(x)
ggplot()+geom_area(aes(x=x, y=y), fill="red", color="purple", alpha=0.3)
下面对以上两个函数的参数进行总结:
●color、alpha、size、linetype:轮廓线的属性。请参考对geom_line的介绍。
●fill:填充色。注意:alpha参数会同时影响color和fill参数。
●ymin、ymax:在geom_ribbon中用于确定两条曲线的位置。
●position:分组绘制时每个图形的相对位置。注意:geom_area默认position="stack"或position_stack(),即绘制堆积图。但在第三章第三节使用恐怖袭击数据的练习中,我们使用了position="identity"或position_identity()。同理, position亦可设为position="fill"或position_fill()。
●orientation:见第三章第一节关于coord_flip的内容。
●outline.type:是否为阴影添加线条,选项为"upper"(添加上部线条,geom_area的默认值)、"lower"(添加下部线条)、"both"(添加上部和下部线条, geom_ribbon的默认值)、"full"(添加包裹阴影的线条)。
在下边的例子中,我们将用geom_ribbon呈现人民币对美元汇率的波动趋势,图中的阴影区域代表收盘价+/-2倍的5日标准差。(图4-3-1)
library(TTR) # 需使用run SD
dat=read.csv("usdcny2019.csv", row.names=1) # 课件中的文件
dat=dat[122: 165,] # 本例只使用6月19日至8月19日的数据
added=run SD(dat$close, n=5, sample=FALSE) # 求5日标准差
line_lower=dat$close-2*added # 阴影下边界
line_upper=dat$close+2*added # 阴影上边界
# 把每周周一的日期设定为X轴标签
D=as.Date(dat$date)(www.xing528.com)
as_week=format(D, format="%u")
pos=which(as_week=="1") # 提取所有是周一的日期
pos=D[pos] # 放标签的位置
lab=format(pos, format="%m-%d") # 标签内容
图4-3-1 带阴影的曲线
p=ggplot()+geom_ribbon(na.rm=TRUE, aes(x=D, ymin=line_lower, ymax=line_upper), alpha=0.6, fill=scales::alpha("#3B4A73", 0.5), color="#3B4A73", size=0.8)+
geom_line(na.rm=TRUE, aes(D, dat$close), color="#6CC0FF", size=1)
p+scale_x_date(breaks=pos, labels=lab)+labs(x="Date", y="HSD/CNY")+
labs(title=" USD/CNY (CNY = X) 2019/6/19 ~ 8/19", subtitle=" Exchange Rate with +/- 2 * 5-Day Standard Error")+
theme_void()+
theme(plot.title=element_text(family="serif", face=2, size=21,color="yellow1"),
plot.subtitle=element_text(family="serif", face=3, size=16, color="yellow1"),
axis.text=element_text(color="#8DCCFB", size=14),
panel.grid.major=element_line(color=scales::alpha("#7C8498", 0.5)),
plot.background=element_rect(fill="#2F3856", color=NA),
plot.margin=unit(rep(3, 4), "mm")
)
geom_area还可绘制堆积面积图。这回我们仍使用原油产量数据,但我们不对每年的产量求和,而是用不同的颜色来表示各国的产量。
oil=read.csv("oil.csv", row.names=1) # 课件中的文件
mycolor=hcl.colors(7, palette="Plasma") # 选择配色
ggplot(oil)+
geom_area(aes(Year, Production, fill=Country), alpha=0.5)+ # 用Country变量进行分组
scale_fill_manual(values=mycolor)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。