绘制r中的不等式

时间:2016-08-10 18:06:59

标签: r plot

我有很多来自我的数据的值,例如x1x2x3等,我正在尝试绘制依赖于这些值的功能的阴影区域。这些区域由形式的不等式定义:

f(x1, x2) <= A <= f(x3, x4)

f(x5, x6) <= A + B <= f(x7, x8)

我希望在x轴上有A,在y轴上有B.

我已经尝试将数值放在数据框中并使用ggplot,但我的技能缺乏,超出简单的线条图/条形图等。我有点迷失,我特别不能弄清楚将不等式绘制为区域的语法。

由于

编辑例如:

        x1    x2    x3    x4    x5    x6
Plot1   0.2   0.3   0.24  0.14  0.17  0.31
Plot2   0.14  0.35  0.30  0.11  0.21  0.39

希望绘制两个单独的图表(一个用于Plot1,一个用于Plot2),其中的区域定义为:

max(x2 + x3, x4 + x5) <= A <= min(1 - x1, 1 - x6)

max(x3, x5) <= A + B <= min(x2 + x3, x5 + x6)

1 个答案:

答案 0 :(得分:3)

我不知道有任何内置R函数来执行此操作。但是,如果满足不等式,则可以使用网格创建data.frame并计算每个网格点。然后你可以用geom_tile绘图。一个工作的例子:

strptime()

编辑:您在评论中询问如何在区域周围绘制边框。我认为一般的灵魂有点复杂,但在你的情况下,它并不那么难。你在不等式中的函数独立于A和B,它们是常数,因此是凸的。由于凸集的交点再次凸起,所以满足不等式的区域也是凸的。这导致了一种利用该区域的凸包的解决方案:

## Equation 1: f1(A,B) <= A < f2(A,B)
## Equation 2: f3(A,B) < A + B < f4(A,B)

library(ggplot2)

grid <- expand.grid( A = seq(-2,2, length.out = 100), B = seq(-1, 1, length.out = 100))

f1 <- function(A, B) B
f2 <- function(A, B) 2*(A^2 + B^2)
f3 <- function(A, B) A*B
f4 <- function(A, B) 2*A+B^3

grid$inside_eq1 <- (f1(grid$A, grid$B) <= grid$A) & (grid$A < f2(grid$A, grid$B))
grid$inside_eq2 <- (f3(grid$A, grid$B) < grid$A + grid$B) & (grid$A + grid$B < f4(grid$A, grid$B))
grid$inside <- grid$inside_eq1 & grid$inside_eq2

ggplot(grid) +
    geom_tile(aes(x = A, y = B, color = inside, fill = inside))