【问题标题】:Coloring 3 regions of a plot in R在 R 中为绘图的 3 个区域着色
【发布时间】:2021-12-29 21:32:07
【问题描述】:

我有一个图,其中有两条曲线(如下)。

我想知道是否有办法在red顶线上方、yellow两条线之间以及green底线下方着色

我想要的情节以及我的可重现代码如下。

f <- function(x,peak_x=10,peak_y=11,coef=.004) coef*-(x-peak_x)^2+peak_y
a <- curve(f,0,65,ylim=c(0,11))
b <- curve(f(x, peak_y = 6,coef = .003),0,65, col=3,add=TRUE)

【问题讨论】:

  • 作为一般策略,我认为您需要使用那些curve 调用返回的值来构建可以填充颜色的多边形。以str(a)str(b) 为起点。因为晚餐来了,所以不能做任何进一步的工作。
  • @IRTFM,你说得对。但是,如果有机会,请您写一个答案吗?
  • 我很困惑。 @thelatemail 已经发布了一个非常符合我想象的内容。如果不清楚他是如何做到的,我很乐意通过编辑他的答案来插入解释。

标签: r function plot polygon


【解决方案1】:

可能有几种方法,但polygon 很好:

## define function
f <- function(x, peak_x, peak_y, coef) coef * -(x - peak_x)^ 2 + peak_y

## base plot
plot(NA, type="l", xlim=c(0,65), ylim=c(0,11))

## coordinates of user plotting space
pusr <- par("usr")

## x points to cover the whole area
x <- seq(pusr[1], pusr[2], length.out=101)

## then plot the polygons associated with the curves
rect(pusr[1], pusr[3], pusr[2], pusr[4], col=2)
polygon(x = c(x, pusr[1]), y = c(f(x, 10, 11, 0.004), pusr[3]), col="yellow")
polygon(x = c(x, pusr[1]), y = c(f(x, 10,  6, 0.003), pusr[3]), col="green")

【讨论】:

  • 非常感谢。经过仔细审查,我意识到您的区域并不准确。正如@IRTFM 所说,理想情况下,我们希望使用曲线调用给出的xy 来精确创建彩色区域。
  • @SimonHarmel 我不明白为什么这些区域“不准确”。
  • 您可以增加length.out= 参数,但它应该非常接近精确,为 50 点。 curve 如果您想完全匹配它,只需绘制一条 101 点的线。 @simonharmel
  • @IRTFM,只需比较我原始帖子中的 3 个区域(红色、黄色、绿色)及其边界以及它们接触 x 轴的位置,然后是预期图与当前图之间的差异答案变得更加清晰。例如,将已发布答案中的绿色区域与我自己帖子中的相应黄色区域进行比较。
【解决方案2】:

正确答案可以通过以下方式获得:

a <- curve(f,-3,65,ylim=c(0,12),xaxs="i",yaxs="i")
pusr <- par("usr")
rect(pusr[1], pusr[3], pusr[2], pusr[4], col=2,border = 1)
b <- curve(f(x, peak_y = 6,coef = .003),-3,65,add=TRUE,col=2)


polygon(c(-3,a$x,63),c(0,a$y,f(63)),col="yellow")
polygon(c(-3,b$x,54),c(-3,b$y,f(55, peak_y = 6,coef = .003)),col=3)
box()

【讨论】:

  • 终于有时间修复我的答案。见上文。
  • @thelatemail,很高兴听到这个消息。
猜你喜欢
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多