我有很多来自我的数据的值,例如x1
,x2
,x3
等,我正在尝试绘制依赖于这些值的功能的阴影区域。这些区域由形式的不等式定义:
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)
答案 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))