如何在ggplot上绘制阴影区域?

时间:2016-10-18 23:09:38

标签: r ggplot2

我在ggplot中有一个图,其中x轴是实数,y轴是我数据的虚数值。例如:

client.rpc.make

所以情节如下:

enter image description here

现在我需要在图上添加阴影区域,包括以下函数范围:

dat=data.frame(real=c(0,0.5,0.7),imaginary=c(0.7,0.5,0.5))
ggplot(dat,aes(real,imaginary))+geom_point(size=7)+xlim(0,1)+ylim(0,1)

非常感谢

1 个答案:

答案 0 :(得分:3)

这似乎更像是数学问题,而不是编程问题。首先确定这将追溯到哪个形状(并且坐标将不一定确定可以着色的区域,但在这种情况下它们确实如此),然后使用例如geom_polygon绘制它们。

看起来你想要绘制一个以(0,0)为中心的半径为0.5的圆,然后将其填入。(你的等式是real^2 + imaginary^2 = a^2来描述这个圆圈。事实a从0到0.5只是意味着你想要每个圆从半径0到半径0.5。b定义你追踪的圆圈的数量,但是一旦你达到2 * pi,你将得到一个完整的圆圈,所以过去这没有什么区别。)

所以你可以在这个圆圈上设置一组(x,y)坐标,例如。

b <- seq(0, 2*pi, by=0.1) # sin/cos are periodic, no point going past 2*pi
circ <- data.frame(x=0.5*cos(b), y=0.5*sin(b))

原图:

dat=data.frame(x=c(0,0.5,0.7),y=c(0.7,0.5,0.5))
p = ggplot(dat,aes(x,y))+geom_point(size=7)+xlim(0,1)+ylim(0,1)+xlab("real")+ylab("imaginary")

所以你需要的只是

p + geom_polygon(dat=circ)

enter image description here

您可以更改颜色等。现在你会注意到这个图中的圆圈看起来很奇怪 - 这是因为x和y限制从0到1限制,而圆圈覆盖的范围大于此值。如果你使用xlimylim ggplot将截断数据(即截断多边形的位使其看起来很奇怪),而不是简单地截断视图窗口。要解决此问题,请使用coord_cartesian来限制轴而不是xlimylim

ggplot(dat, aes(x, y)) + geom_point(size=7) +
    coord_cartesian(xlim=c(0, 1), ylim=c(0, 1)) +
    geom_polygon(dat=circ)

enter image description here