Подтвердить что ты не робот

Самый простой способ построить неравенство с заштрихованным заполнением?

enter image description here

Обратитесь к приведенному выше графику. Я нарисовал уравнения в excel и затем затенен вручную. Вы можете видеть, что это не очень аккуратно. Вы видите, что есть шесть зон, каждая из которых ограничена двумя или более уравнениями. Каков самый простой способ нарисовать неравенства и затенять регионы, используя заштрихованные шаблоны?

4b9b3361

Ответ 1

Чтобы создать ответ на @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)
    })

enter image description here

Если рассматриваемая область окружена более чем двумя уравнениями, просто добавьте дополнительные условия:

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)
    })

enter image description here

Ответ 2

В R существует ограниченная поддержка шаблонов заполнения, и они могут быть только применяется к прямоугольникам и многоугольникам. Это и только в традиционной графике, не ggplot2 или lattice.

Можно заполнить прямоугольник или многоугольник набором строк под определенным углом, с определенным разделением между линиями. плотность аргумент управляет разделением между линиями (в терминах строк на дюйм) и аргумент angle управляет углом линий.

вот пример из справки:

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))

enter image description here

EDIT

Другим вариантом является использование альфа-смешивания для различения регионов. Здесь, используя пример @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)

enter image description here

Ответ 3

Есть несколько представлений на центральном файловом обмене MATLAB, которые будут вызывать заштрихованные графики различными способами для вас.