【问题标题】:Polygon function in R creates a line between first and last pointR中的多边形函数在第一个点和最后一个点之间创建一条线
【发布时间】:2019-08-12 23:03:30
【问题描述】:

我想使用多边形函数绘制一个时间序列,因为我想在不同的时间序列之间创建阴影。但是,当调用polygon () 时,该函数会在第一个点和最后一个点之间添加一条线(本质上它连接第一个点和最后一个点以完成绘图)。我想知道如何告诉 R 不要加入两者。已经发布了稍微相关的问题(Line connecting the points in the plot function in R),但解决方案没有帮助。任何帮助将不胜感激。

我已经尝试了几件事,例如像下面的部分那样重新排序数据。

% ts_lb_vec 是我的向量格式的时间序列;

%x是时间向量(2000年到2015年);

% 我首先调用 plot 来绘制 x(时间)和 y(时间序列)。这工作正常;

plot(x, ts_lb_vec,type='n',ylim=c(-300,300), ylab="", xlab="")

但如果我想使用多边形函数来使用着色功能,它会画线,我已经尝试重新排序数据(如下所示)以试图消除问题,但没有成功

polygon(x[order(x),ts_lb_vec[order(x)], xlim=range(x), ylim=range(ts_lb_vec))

我希望 R 在调用多边形函数时不连接我的第一个和最后一个点(见图)。下图是使用以下代码生成的:

plot(x, ts_lb_vec,type='n', ylab="", xlab="")
polygon(x, ts_lb_vec)

澄清一下,我想要填充两个时间序列之间的空间,因此我需要函数多边形。见下图

【问题讨论】:

  • 两端必须相连,否则就不是真正的多边形,也无法判断哪个区域应该被着色。您必须决定如何连接两端。
  • 好的,这是有道理的,但我想要的是一个时间序列和另一个时间序列之间的空间充满了阴影。我在问题中附上了第二张图片以进行澄清。谢谢!

标签: r plot time-series polygon


【解决方案1】:

我使用ggplot2 组合了一个解决方案。

关键步骤是绘制一个单独的多边形,其中一条曲线的顺序被颠倒以避免交叉回到起点。

# simple example data
examp.df <- data.frame(time = seq_len(15), a  = c(1,2,3,4,5,5,5,4,3,2,4,5,6,7,8), b = c(2,4,5,6,7,8,7,6,6,5,6,4,3,2,1))

# the polygon is generated by inverting the curve b
polygon <- data.frame(time <- c(examp.df$time, rev(examp.df$time)), y.pos = c(examp.df$a, rev(examp.df$b)))

ggplot(examp.df) + 
  geom_polygon(data = polygon, aes(x = time, y = y.pos), fill = "blue", alpha = 0.25) + 
  geom_line(aes(x= time, y = a), size = 1, color = "red") + 
  geom_line(aes(x = time, y = b), size = 1, color = "green") + 
  theme_classic()

这会导致:

如果您想了解更多关于ggplot2 的信息,这是一个很好的introduction

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多