Ich möchte einige quadratische Plots erstellen, die Reihen von Sechsecken in ihnen haben, wie gezeichnet here. Ich möchte sowohl reguläre (geometrisch regelmäßige) als auch abnormale Hexagon-Tessellationen zeichnen, daher glaube ich nicht, dass Werkzeuge aus dem "sp" -Paket funktionieren.R - Plotten Hexagon Tessellations
Unten ist mein Versuch einer regelmäßigen Hexagon Tesselation mit owin und Plot.
library(maptools)
library(spatstat)
twid <- 20
theight <- 20
sideL <- 2
rp1 <- (sideL/2)*sqrt(3)
rp2 <- 2*(sideL/2)*sqrt(3)
rp3 <- 3*sideL
bx <- c(1:floor(twid/rp3))
by <- c(1:floor(theight/rp3))
hex_array1 <- list(bx)
hex_array2 <- list(by)
for(i in 1:ceiling(twid/rp3)){
bx[i] <- list(x=c(0+rp3*i,1+rp3*i,3+rp3*i,4+rp3*i,3+rp3*i,1+rp3*i))
by[i] <- list(y=c(rp1,rp2,rp2,rp1,0,0))
hex_array1[i] <- bx[i]
hex_array2[i] <- by[i]
}
har1 <- list(x=c(0,1,3,4,3,1), y=c(rp1,rp2,rp2,rp1,0,0))
har2 <- list(x=hex_array1,y=hex_array2)
hexig <- owin(poly=list(list(x=c(0,twid,twid,0), y=c(0,0,theight,theight)),
har1, har2
)
)
plot(hexig)
Allerdings scheint die oben auf Fehler, weil HAR2 nicht als eine Liste von Listen korrekt formatiert ist.
Das oben genannte ist offensichtlich nur für eine einzelne Reihe von Sechsecken, aber ich dachte, sobald ich die erste Reihe bekam, würde ich die einzelne Reihe in eine for-Schleife wickeln, die einen Satz x und y Abstände für jede Reihe hinzufügte. Ich kann einfach nicht herausfinden, wie man har2 formatiert, damit ich es direkt in die Poly-Funktion von owin einbinden kann.
Ich bin offen dafür, die Art, wie ich das oben getan habe, komplett zu verändern, ich bin immer noch relativ neu für R, also weiß ich definitiv noch nicht, wie man die Dinge am effizientesten/elegantesten macht. Ich laufe gerade R Version 3.3.2 auf Win 10 x64 mit RStudio V0.99.903
Jede Hilfe wird geschätzt.
Vielen Dank!
Verglichen mit meinem ggplot-Hack erzeugt dies direkt das gewünschte Tesselationsmuster und ist viel flexibler in Bezug auf Transformationen. Hoffentlich kehrt das OP zurück und wählt dies als beste Antwort aus. Außerdem wäre es hilfreich, wenn Sie alle '#>' und '#> affn.t>' loswerden würden und nur den blanken Code zur Verfügung stellen würden, so dass Leute kopieren und einfügen können, ohne die Cursor-Zeichen bearbeiten zu müssen. – eipi10
Danke für das positive Feedback @ eipi10.Ich habe meine Antwort aktualisiert, um das Kopieren und Einfügen zu erleichtern. –