Plot 用阴影填充绘制不等式的最简单方法?

Plot 用阴影填充绘制不等式的最简单方法?,plot,graph,Plot,Graph,参考上面的图。我已经在excel中画出了方程式,然后用手画了阴影。你可以看到它不是很整洁。您可以看到有六个区域,每个区域由两个或多个方程限定。使用阴影图案绘制不等式和阴影区域的最简单方法是什么 我想这里有一个对你来说很方便的工具 请看以下演示: 在MATLAB中心文件交换上,有几种可以以各种方式为您生成阴影图的图形。在R中,对填充图案的支持有限,只能 应用于矩形和多边形。这仅在传统图形中,没有ggplot2或lattice 可以用绘制的一组线填充矩形或多边形 以一定的角度,线与线之间有特定的


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

我想这里有一个对你来说很方便的工具

请看以下演示:




在MATLAB中心文件交换上,有几种可以以各种方式为您生成阴影图的图形。

在R中,对填充图案的支持有限,只能 应用于矩形和多边形。这仅在传统图形中,没有
ggplot2
lattice

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

下面是帮助中的一个示例:

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
package叠加多边形,您可以执行以下操作:

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)
库(gridBase)

vps根据@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”)#

a+1表示漂亮的手绘图像!!但是,你可能会发现自己在一个不太宽容的人的反对票的末尾,因为你没有展示任何代码、样本数据或你已经尝试过的东西@西蒙诺101谢谢。我试过excel和matlab。Matlab需要我没有的mupad。此外,我认为很多软件都可以做到这一点,尽管难度会有很大的差异。当有人能确定哪个软件在绘制不等式方面真的很酷时,我就可以开始详细学习该软件了。这可能与:(如果你想要阴影区域,也可以与此结合:)。但是正如你在评论中提到的,Matlab可能不是完成这项任务的最佳工具。我不知道为什么Stata在这里是一个标签。但Stata不支持图案填充或点画,这基本上是一个原则问题。我相信,我有资格成为一名有经验的Stata用户。你想要的在斯塔塔并不是绝对不可能的,但最好去别处看看。+1!我只是使用with使您的示例更具可读性。使用多边形是不明显的,所以我觉得你的代码没有你说的那么脏)。如果这个区域被3或4个方程式包围了怎么办?@agstudy谢谢!阿什尼戈亚尔:请看编辑。然而,实现自动化相对比较困难:解决方案必须针对每个问题进行定制。从技术上讲,除了阴影外,每个多边形都是空白的,因此两个阴影将重叠(如果一个有水平线,而另一个垂直线,则您将有一个包含垂直线和水平线的图案)实际上,返回已绘制点的坐标是R版本2.10.0的新功能之一
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)
    })