2016-05-25 15 views
2

Ich habe einige Probleme mit der scatter3d Funktion, insbesondere dass es scheint unmöglich zu sein, der Funktion zu diktieren, was die Grenzen der Achse sein sollten. Hier ist meine Grund Plotten Funktion mit wenigen Datenpunkten aus dem Satz Ich arbeite mit:Wie können Achsenlimits auf Auto/RGL-3D-Plots gesetzt werden? Scatter3d speziell

library(rgl) 
library(plot3D) 
library(car) 

df <- data.frame(meanX = c(147.34694, 173.89244, 135.73004, 121.93766, 
          109.72152, 92.53709, 165.46588, 169.77744, 
          127.01796, 99.34347), 
       meanY = c(140.40816, 110.99128, 134.56023, 164.18703, 
          166.04051, 155.97329, 105.29377, 104.42683, 
          130.17066, 155.99696), 
       avgDist = c(40.788118, 12.957329, 14.24348, 39.10424, 
          34.694258, 25.532335, 21.491695,23.528944, 
          9.309201, 31.916879)) 

car::scatter3d(x = df$meanX, y = df$meanY, z = df$avgDist, surface = FALSE) 

Dies zeichnet in Ordnung, aber einrichtet Standard Achsbereiche

xlim = c(90,200) 
ylim = c(100,200) 
zlim = c(9,40) 

Das Problem ist, scheint thatIi zu völlig unfähig, dies zu ändern. Ich weiß, dass RGL nicht Clipping zulässt, und ich will nicht, dass es hier keine Datenpunkte auszuschließen, aber die Achsenbereich ist ein bisschen höher als der Maximalwert jeder Achse

max(df$meanX) 
[1] 173.8924 

max(df$meanY) 
[1] 166.0405 

max(df$avgDist) 
[1] 40.78812 

Was würde ich zu tun, ist die Achsgrenze auf X- und Y-70-185, eingestellt von dem, was kann ich sagen, soll dies möglich sein, mit diesem Code:

car::scatter3d(x = df$meanX, y = df$meanY, z = df$avgDist, surface = FALSE, 
      xlim = c(70,185), ylim = c(70,185)) 

Aber das erzeugt nur das gleiche Grundstück (mit keine Fehler oder Warnungen). Weiß jemand, wie man diese Achsen manuell einstellt?

+0

Sie sollten nicht plot3D laden; es ist nicht mit rgl oder scatter3d verwandt. –

+0

rgl * erlaubt * Clipping. Ich weiß nichts über scatter3d, aber plot3d würde es für Sie tun: plot3d (x = df $ meanX, y = df $ meanY, z = df $ avgDist, xlim = c (70,185), ylim = c (70,185)) – user2554330

+0

Hmm, du bist, denke, es ist nur das {Auto} -Paket, das Probleme mit den Grenzen hat, jetzt habe ich nur Probleme bekommen die Surface3D-Funktion Ich hatte gerade gestern arbeiten mit plot3d als auch arbeiten :) –

Antwort

1

In den Fällen, in denen axis.scales = TRUE, jetzt der Standardwert, wird der Code zum Festlegen der minimalen und maximalen Beschriftungen und Häkchen für jede Achse durch die nicht exportierte car:::nice Funktion ausgewählt. Sie können mit axis.scales = FALSE aufrufen und dann die Arbeit zum Hinzufügen von Achsen-Ticks und Beschriftungen wiederholen.

with(df, scatter3d(meanX , meanY, avgDist, axis.scales = FALSE, 
      xlim = c(70,185), ylim = c(70,185), zlim = c(9,40))) 

Alternativ können Sie versuchen, den Code neu zu schreiben, um zu überprüfen, um zu sehen, ob einer der Xlim, ylim oder ZGRENZ Parameter vorhanden sind und diese Werte für diejenigen ersetzen, die von diesem Stück Code im Auto einrichten :: : scatter3d:

car:::scatter3d 
#------- code near the top of the console display------ 
if (axis.scales) { 
    lab.min.x <- nice(minx) 
    lab.max.x <- nice(maxx) 
    lab.min.y <- nice(miny) 
    lab.max.y <- nice(maxy) 
    lab.min.z <- nice(minz) 
    lab.max.z <- nice(maxz) 
    minx <- min(lab.min.x, minx) 
    maxx <- max(lab.max.x, maxx) 
    miny <- min(lab.min.y, miny) 
    maxy <- max(lab.max.y, maxy) 
    minz <- min(lab.min.z, minz) 
    maxz <- max(lab.max.z, maxz) 
    min.x <- (lab.min.x - minx)/(maxx - minx) 
    max.x <- (lab.max.x - minx)/(maxx - minx) 
    min.y <- (lab.min.y - miny)/(maxy - miny) 
    max.y <- (lab.max.y - miny)/(maxy - miny) 
    min.z <- (lab.min.z - minz)/(maxz - minz) 
    max.z <- (lab.max.z - minz)/(maxz - minz) 
} 

ich dachte, es wäre die lim Werte zu ermöglichen, wäre in Ordnung sein nur zu ändern, wenn sie sich auf das Innere der nice Werte waren, aber dieser Code Fehler aus, so wird Logik müssen erkennen fehlt der Limetten:

lab.min.x <- max(nice(minx), xlim[1]) 
    lab.max.x <- min(nice(maxx), xlim[2]) 
    lab.min.y <- max(nice(miny), ylim[1]) 
    lab.max.y <- min(nice(maxy), ylim[2]) 
    lab.min.z <- max(nice(minz), zlim[1]) 
    lab.max.z <- min(nice(maxz), zlim[2]) 
+0

ich war Herumspielen mit den axis.scales = FALSE, aber soweit ich das beurteilen kann, werden nur die Zahlen auf den Ticks/Skalen gelöscht, aber der tatsächliche Bereich wird immer noch nicht von x/y/zlim beeinflusst. –

+0

Das war nicht meine Erfahrung. –