2016-06-30 11 views
0

Ich zeichne Polygon in R und speichere es.Problem, ich bin konfrontiert ist, dass das gesamte Grundstück als PNG-Datei gespeichert wird, aber ich möchte nur den gefüllten Bereich in dem Polygon speichern. Gibt es einen Weg dafür?Gefüllten Bereich von Polygon in R speichern

enter image description here

x<-c(0.000000000,0.010986328,0.006351471,-0.004634857) 
y<-c(0.000000000,0.007232612,0.012841203,0.006199415) 
file_name = paste("~/Downloads/Plot", ".png", sep="") 
png(file_name,width=1280,height = 720,units="px",res=200) 
plot(x,y,axes=FALSE,ylab='',xlab='')+polygon(x,y,col="#FF0000FF") 
dev.off() 
+0

können Sie Ihren Code teilen? – Alex

+0

@Alex Ich habe den Code jetzt hinzugefügt –

Antwort

0

Wenn Sie eine monofigure Plot Zeichnung (das ist die Standardeinstellung), dann glaube ich, gibt es drei mögliche Quellen des Abstandes, der ein Handlungselement dazu führen kann, nicht auf die Kanten erstrecken das Grafikgerät:

1: Datenkoordinatenlimits, die größer sind als das Ausmaß des Plotelements.

2: "interne Abstand", die am besten als eine Erweiterung der Grundstücksfläche gedacht ist, die innerhalb der Ränder sitzt.

3: Ränder. Normalerweise werden Achsen, Ticks, Hilfsstriche, Achsenbeschriftungen, Titel und manchmal Legenden gezeichnet.

All diese Quellen des Abstandes kann mit den folgenden Anpassungen eliminiert werden:

1: die xlim und ylim Grafikparameter das Ziel gesetzt, Handlungselement paßt perfekt zu.

2: gesetzt xaxs='i',yaxs='i', die entweder mit einem präemptiven par() Anruf oder auf dem anfänglichen plot() Anruf durchgeführt werden können.

3: Zero die Ränder mit mar=c(0,0,0,0). Diese muss mit par()vorher zu der ursprünglichen plot() Aufruf erfolgen.

Beispiel:

## generate data 
pts <- data.frame(x=c(0.2,0.4,0.9,0.7),y=c(0.5,0.4,0.5,0.6)); 

## precompute plot parameters 
xlim <- range(pts$x); 
ylim <- range(pts$y); 

## draw plot 
par(mar=c(0,0,0,0)); 
plot(NA,xlim=xlim,ylim=ylim,xaxs='i',yaxs='i',axes=F,ann=F); 
points(pts$x,pts$y,pch=21L); 
polygon(pts$x,pts$y,col='red',pch=21L); 

x


Multifigure Plots eine zusätzliche Quelle der Abstand entstehen kann, nämlich äußeren Ränder, aber es sieht so aus, dass für dieses Problem nicht Sie betreffen. In jedem Fall bin ich mir ziemlich sicher, dass die äußeren Ränder sowieso immer auf Null gesetzt werden.

Die entsprechende Dokumentation finden Sie unter par().


Es sieht aus wie ich die Frage missverstanden. Was Sie wollen, ist ein transparenter Hintergrund, der sich von der einfachen Anpassung der Bildgröße an das Plot-Element unterscheidet.

Sie können die Funktion png() verwenden, um den Hintergrund transparent zu machen, indem Sie bg='transparent' übergeben, wie auf der Dokumentationsseite erläutert.

Zum Beispiel, hier ist mein Einbau Bild mit transparentem Hintergrund gespeichert:

y

Beachten Sie, dass nicht alle Zuschauer Bild korrekt erkennen und/oder zeigen deutlich die Transparenz des Hintergrunds. Ich würde empfehlen GIMP, die im Grunde eine kostenlose Photoshop-Abklatscher ist, wenn auch deutlich leichter in Funktionen. GIMP stellt transparenten Bereich als eine Art Schachbrett aus grauen Quadraten, die wie folgt aussieht:

z

+0

Danke für Ihre Antwort.Aber auch damit, wenn ich das Bild speichern, wird die ganze Handlung gespeichert, aber nur das Bild in rot gefüllten Bereich und Rest des Hintergrunds zu schneiden, um transparent zu sein –

+0

@VivekSharma Siehe Bearbeiten. – bgoldst