15

在此处输入图像描述

参考上图。我已经在excel中绘制了方程式,然后手动着色。你可以看到它不是很整洁。您可以看到有六个区域,每个区域都由两个或多个方程式界定。使用阴影图案绘制不等式和阴影区域的最简单方法是什么?

4

4 回答 4

17

为了建立@agstudy 的答案,这里有一种快速而简单的方法来表示 R 中的不等式:

plot(NA,xlim=c(0,1),ylim=c(0,1), xaxs="i",yaxs="i") # Empty plot
a <- curve(x^2, add = TRUE) # First curve
b <- curve(2*x^2-0.2, add = TRUE) # Second curve
names(a) <- c('xA','yA')
names(b) <- c('xB','yB')
with(as.list(c(b,a)),{
    id <- yB<=yA
    # b<a area
    polygon(x = c(xB[id], rev(xA[id])),
            y = c(yB[id], rev(yA[id])), 
            density=10, angle=0, border=NULL)
    # a>b area
    polygon(x = c(xB[!id], rev(xA[!id])),
            y = c(yB[!id], rev(yA[!id])), 
            density=10, angle=90, border=NULL)
    })

在此处输入图像描述

如果有问题的区域被两个以上的方程包围,只需添加更多条件:

plot(NA,xlim=c(0,1),ylim=c(0,1), xaxs="i",yaxs="i") # Empty plot
a <- curve(x^2, add = TRUE) # First curve
b <- curve(2*x^2-0.2, add = TRUE) # Second curve
d <- curve(0.5*x^2+0.2, add = TRUE) # Third curve

names(a) <- c('xA','yA')
names(b) <- c('xB','yB')
names(d) <- c('xD','yD')

with(as.list(c(a,b,d)),{
    # Basically you have three conditions: 
    # curve a is below curve b, curve b is below curve d and curve d is above curve a
    # assign to each curve coordinates the two conditions that concerns it.

    idA <- yA<=yD & yA<=yB
    idB <- yB>=yA & yB<=yD
    idD <- yD<=yB & yD>=yA
    polygon(x = c(xB[idB], xD[idD], rev(xA[idA])),
            y = c(yB[idB], yD[idD], rev(yA[idA])), 
            density=10, angle=0, border=NULL)
    })

在此处输入图像描述

于 2013-03-13T13:35:44.917 回答
10

在 R 中,只有有限的填充模式支持,它们只能应用于矩形和多边形。这仅在传统图形中,没有ggplot2lattice

可以用一组以特定角度绘制的线条填充矩形或多边形,线条之间有特定的分隔。密度参数控制线条之间的 间距(以每英寸线数表示),角度参数控制线条的角度。

这是帮助中的一个示例:

plot(c(1, 9), 1:2, type = "n")
polygon(1:9, c(2,1,2,1,NA,2,1,2,1),
         density = c(10, 20), angle = c(-45, 45))

在此处输入图像描述

编辑

另一种选择是使用 alpha 混合来区分区域。这里使用@plannapus 示例和gridBase包来叠加多边形,您可以执行以下操作:

library(gridBase)
vps <- baseViewports()
pushViewport(vps$figure,vps$plot)
with(as.list(c(a,b,d)),{
  grid.polygon(x = xA, y = yA,gp =gpar(fill='red',lty=1,alpha=0.2))
  grid.polygon(x = xB, y = yB,gp =gpar(fill='green',lty=2,alpha=0.2))
  grid.polygon(x = xD, y = yD,gp =gpar(fill='blue',lty=3,alpha=0.2))
}
)
upViewport(2)

在此处输入图像描述

于 2013-03-13T13:19:23.500 回答
3

MATLAB Central File Exchange 上有多个提交内容,它们将以各种方式为您生成阴影图。

于 2013-03-13T13:03:06.247 回答
2

我认为在这里可以为您派上用场的工具是gnuplot

看看以下演示:

感觉
统计之间的
一些技巧

于 2013-03-13T12:34:01.990 回答