erfüllen Ich möchte ein ggplot
in dem der gesamte Bereich, in dem X und Y erfüllen die folgende Randbedingung erzeugen schattiert:Shade eine Region von ggplot wo x, y eine Einschränkung
(XY)/(X + Y-1)> 2
Was ist der beste Weg, dies zu tun?
erfüllen Ich möchte ein ggplot
in dem der gesamte Bereich, in dem X und Y erfüllen die folgende Randbedingung erzeugen schattiert:Shade eine Region von ggplot wo x, y eine Einschränkung
(XY)/(X + Y-1)> 2
Was ist der beste Weg, dies zu tun?
Nun, ich glaube nicht, dass ich das gesamte Region zeichnen konnte, aber wie wäre es damit: Die Ungleichheit zu y > 2*(x-1)/(x-2)
äquivalent ist, also lassen Sie uns den kritischen y-Wert für jedes x finden und dann die Region zeichnen, wenn die Ungleichheit erfüllt ist:
library(ggplot2)
x = seq(-10,14,0.001)
y = 2*(x-1)/(x-2)
dat = data.frame(x,y)
ggplot(dat) +
geom_ribbon(aes(x, ymin=y, ymax=ifelse(x>2, Inf,-Inf)), fill="blue") +
theme_bw() +
coord_cartesian(ylim=range(-10,14), xlim=c(-10,14),expand=FALSE) +
labs(y="y") +
geom_hline(yintercept=2, colour="red", size=0.5, alpha=0.5)
die horizontale rote Linie zeigt den kritischen Wert, y nähert, wenn der Absolutwert von x (der 2) wird groß.
Probieren mit ggplot2, dplyr. Einige Daten:
df<-data.frame(x=runif(1:100),y=runif(1:100))
Hinzufügen der Einschränkung:
df1<-df%>%mutate(constraint=ifelse((x*y/(x+y-1))>2,"yes","no"))
Einschränkungen:
which(df1$constraint=="yes")->k
die Handlung:
ggplot()+geom_area(data=df1[k,],aes(x,y,fill=constraint),alpha=0.5)+geom_point(data=df1[k,],aes(x,y))
Aber das Ergebnis Sinn nicht wirklich machen - einige Werte von (x, y) in beiden Farben schattiert, was auf beide treffen und nicht die Einschränkung zu erfüllen. –
yup ... einverstanden. Die Antwort von @ eipi10 ist korrekt. Der geom_area gibt den Bereich an, der durch die Einschränkung definiert ist == "yes". Ich habe die Änderungen vorgenommen. Auf jeden Fall würde ich geom_ribbon antwort bevorzugen. – thisisrg