2016-05-05 7 views
0

Ich versuche einen Weg zu finden, um +/- Standardfehlerbalken zu einem 3D-Balkendiagramm in Gitterextra mit der Wolkenfunktion hinzuzufügen. Ich weiß, 3D-Diagramme sind nicht die beste Art, Daten zu visualisieren, aber ich wurde von meinen Vorgesetzten gebeten, eins zusammenzustellen, um zu sehen, wie es aussieht. Ich habe ein paar Tage damit verbracht, Beiträge auf dieser Seite und anderen zu durchsuchen und finde keine Antwort. Ist es sogar in einem 3D-Raum machbar?Hinzufügen von +/- Standardfehlerbalken zu einem 3D-Balkendiagramm in Gitterextra

Meine Daten beziehen sich auf die prozentuale Abdeckung von x Arten in 3 verschiedenen Größenklassen aus 3 verschiedenen gealterten Assemblagen innerhalb verschiedener Käfigbehandlungen. Ich habe die Farbe nach Größe (sml, med, lg) und nach Alter/Käfig (4,8,12 Wochen; Käfig, kein Käfig).

Der Code, den ich habe, ist:

library(latticeExtra) 

cloud(Sol.Ascid ~ AgeCage + Size, dd, 
    panel.3d.cloud = panel.3dbars, 
    col.facet = level.colors(dd$CageSize, at = 0:6, 
          col.regions = myColoursTrans, 
          colors = TRUE), 
    xbase = 0.6, ybase = 0.6, zlim = c(0, 6), 
    xlab = NULL, ylab = NULL, zlab = NULL, main = "Solitary Ascidians", 
    lty = 0, #got rid of lines since they're not right.. not sure why.. 
    screen = list(z = 50, x = -50, y = 0), 
    scales = list(arrows = FALSE, col = 1), 
    par.settings = list(axis.line = list(col = "transparent"))) 

dd ist ein Datenrahmen mit dem Mittelwert und Standardfehler für alle Arten.

3D bar plot from the code above

ich entschuldige mich, wenn dies eine dumme Frage ist, ich bin neu zu r und zu diesem Forum.

Grüße,

DaveTurek - Der Code für myColoursTrans (unten), kann ich kopieren und einfügen, nur die Daten in diesem Fenster (Sieht ein bisschen chaotisch)?

structure(list(AgeCage = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 
3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 6L), .Label = c("4 NC", 
"4 C", "8 NC", "8 C", "12 NC", "12 C"), class = "factor"), Size = structure(c(1L, 
2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 
3L), .Label = c("Small", "Medium", "Large"), class = "factor"), 
CageSize = c(2, 4, 6, 1, 3, 5, 2, 4, 6, 1, 3, 5, 2, 4, 6, 
1, 3, 5), Sol.Ascid = c(0, 0, 0, 0.1, 0, 0, 0, 0, 0, 0.2, 
0.2, 0.5, 0, 0, 0.3, 0.2, 0.9, 4.7), Sol.Ascid.se = c(0, 
0, 0, 0.1, 0, 0, 0, 0, 0, 0.133333333333333, 0.133333333333333, 
0.30731814857643, 0, 0, 0.152752523165195, 0.133333333333333, 
0.406885187191123, 1.19303534454489), Barnacles = c(0.5, 
0.2, 0, 0.5, 0.3, 0.4, 0.4, 0.1, 0, 0.7, 0.5, 0, 0.2, 0.5, 
0.9, 0.4, 0.2, 0.8), Barnacles.se = c(0.30731814857643, 0.133333333333333, 
0, 0.341565025531987, 0.3, 0.4, 0.221108319357027, 0.1, 0, 
0.395811402901264, 0.223606797749979, 0, 0.2, 0.223606797749979, 
0.433333333333333, 0.4, 0.133333333333333, 0.416333199893227 
), Dead.Barnacles = c(0, 0.1, 0, 0.7, 0.2, 0, 0.9, 3.1, 0.5, 
4.4, 7.7, 1.9, 1.55, 3.35, 6.4, 1.7, 2.7, 8.3), Dead.Barnacles.se = c(0, 
0.1, 0, 0.334995854037363, 0.2, 0, 0.406885187191123, 1.19675487140108, 
0.401386485959743, 1.70749979664876, 1.9035055380359, 0.737111479583199, 
0.216666666666667, 1.39851111305321, 1.38403596613511, 0.7, 
0.989388138643722, 3.33683149776018), Barnacle.Scar = c(1.3, 
0.3, 0, 0, 0, 0, 3.3, 18, 6.9, 0, 0.3, 0.1, 1.7, 1.9, 6, 
0, 0.3, 0), Barnacle.Scar.se = c(0.448454134902457, 0.213437474581095, 
0, 0, 0, 0, 0.7, 2.67083008320135, 1.8405916923038, 0, 0.3, 
0.1, 0.53851648071345, 0.706320670013903, 1.25609624542778, 
0, 0.3, 0), Sponges = c(0, 0, 0, 0.1, 0, 0, 0.1, 0.3, 0.1, 
0, 0.5, 1.4, 0, 0.6, 1.3, 0.3, 1.2, 2.5), Sponges.se = c(0, 
0, 0, 0.1, 0, 0, 0.1, 0.152752523165195, 0.1, 0, 0.268741924943285, 
0.561743318211757, 0, 0.221108319357027, 0.53851648071345, 
0.3, 0.3590109871423, 0.819891591749923), Serpulids = c(0.8, 
0.3, 0, 0.9, 0.1, 0, 1.7, 2.4, 0.95, 0.9, 2.3, 1.4, 1, 2.4, 
1.5, 1.5, 2.1, 1.9), Serpulids.se = c(0.32659863237109, 0.213437474581095, 
0, 0.585946527708232, 0.1, 0, 0.683942817622773, 0.956846672960488, 
0.320156211871642, 0.31446603773522, 0.683942817622773, 0.791622805802528, 
0.298142396999972, 0.581186525805423, 0.5, 1.17615191762516, 
0.674124947205223, 0.706320670013903), Serpulid.Scars = c(1.7, 
0.5, 0, 0, 0, 0, 0.9, 1.7, 0.4, 0, 0, 0, 1.2, 1.5, 1.4, 0, 
0, 0), Serpulid.Scars.se = c(0.472581562625261, 0.401386485959743, 
0, 0, 0, 0, 0.406885187191123, 0.517472489875334, 0.221108319357027, 
0, 0, 0, 0.32659863237109, 0.30731814857643, 0.42687494916219, 
0, 0, 0)), .Names = c("AgeCage", "Size", "CageSize", "Sol.Ascid", 
"Sol.Ascid.se", "Barnacles", "Barnacles.se", "Dead.Barnacles", 
"Dead.Barnacles.se", "Barnacle.Scar", "Barnacle.Scar.se", "Sponges", 
"Sponges.se", "Serpulids", "Serpulids.se", "Serpulid.Scars", 
"Serpulid.Scars.se"), row.names = c(NA, -18L), class = "data.frame") 

library(RColorBrewer)     # load some colour palettes 
display.brewer.all()     # check them out visually 
myColours <- brewer.pal(6, "Paired") # choose the first 6 from the one with paired colours 

## function to add transparency to colours 
add.alpha <- function(col, alpha=1){ 
    apply(sapply(col, col2rgb)/255, 2, 
     function(x) 
     rgb(x[1], x[2], x[3], alpha=alpha)) 
} 

myColoursTrans <- add.alpha(c(myColours), alpha = 0.7) 
+0

Sie sollten Ihre Daten bereitstellen. Fügt Ausgabe von 'dput (dd)' ein. Ich nehme an, es ist nicht zu lang. Auch sollte 'myColoursTrans' liefern. – DaveTurek

+0

Die Daten hinzugefügt, hoffe, Sie haben nicht jedes Mal eine Benachrichtigung erhalten, wenn ich den Beitrag bearbeitet habe! – DBolt

+0

Nein, nur von Ihrem Kommentar benachrichtigt. Vielleicht chaotisch, aber 'dd <- structure (liste (AgeCage ...) gibt uns deine Daten, damit wir deine Handlung reproduzieren können. Keine Versprechungen, aber ich werde sehen, ob ich ein paar Ideen ausprobieren kann. – DaveTurek

Antwort

0

Sie könnten versuchen, Schichten von latticeExtra zu verwenden. Definieren Sie die oberen und unteren Werte.

dd = within(dd, { 
    SAmax = Sol.Ascid+Sol.Ascid.se 
    SAmin = Sol.Ascid-Sol.Ascid.se 
    }) 

Definieren Sie separate Farben.

myColoursTrans1 <- add.alpha(c(myColours), alpha = 0.1) 
myColoursTrans2 <- add.alpha(c(myColours), alpha = 0.3) 
myColoursTrans3 <- add.alpha(c(myColours), alpha = 0.9) 

Dann in drei Schichten bauen.

cloud(SAmax ~ AgeCage + Size, dd, 
    panel.3d.cloud = panel.3dbars, 
    col.facet = level.colors(dd$CageSize, at = 0:6, 
          col.regions = myColoursTrans1, 
          colors = TRUE), 
    xbase = 0.6, ybase = 0.6, zlim = c(0, 6), 
    xlab = NULL, ylab = NULL, zlab = NULL, main = "Solitary Ascidians", 
# lty = 0, #got rid of lines since they're not right.. not sure why.. 
    screen = list(z = 50, x = -50, y = 0), 
    scales = list(arrows = FALSE, col = 1), 
    par.settings = list(axis.line = list(col = "transparent"))) + 

    as.layer(cloud(Sol.Ascid ~ AgeCage + Size, dd, 
    panel.3d.cloud = panel.3dbars, 
    col.facet = level.colors(dd$CageSize, at = 0:6, 
          col.regions = myColoursTrans2, 
          colors = TRUE), 
    xlab = NULL, ylab = NULL, zlab = NULL, main = "", 
    xbase = 0.6, ybase = 0.6, zlim = c(0, 6),#lty=0, 
    screen = list(z = 50, x = -50, y = 0))) + 

    as.layer(cloud(SAmin ~ AgeCage + Size, dd, 
    panel.3d.cloud = panel.3dbars, 
    col.facet = level.colors(dd$CageSize, at = 0:6, 
          col.regions = myColoursTrans3, 
          colors = TRUE), 
    xlab = NULL, ylab = NULL, zlab = NULL, main = "", 
    xbase = 0.6, ybase = 0.6, zlim = c(0, 6),#lty=0, 
    screen = list(z = 50, x = -50, y = 0))) 

Die oberen Flächen überlappen sich nicht gut (siehe Medium 12 C). Du könntest keine Farbe versuchen, nur Linien für die Min und Max.

Verwandte Themen