Я пытаюсь найти способ добавить +/- стандартные бары ошибок к 3D-графику в решетке, используя облачную функцию. Я знаю, что 3D-графики - это не лучший способ визуализации данных, но мои начальники попросили собрать их вместе, чтобы посмотреть, как это выглядит. Я провел несколько дней, просматривая сообщения на этом сайте и другие, и не могу найти ответ. Это даже выполнимо в трехмерном пространстве?Добавить +/- стандартные столбцы ошибок в график 3D-штрихов в решеткеExtra
Мои данные смотрят на процентную долю х видов в 3 классах по размеру из 3 разных возрастных групп в разных сеансах. У меня цвет, закодированный по размеру (sml, med, lg) и по возрасту/клетке (4,8,12 недели, клетке, без клетки).
код у меня есть:
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")))
дд представляет собой кадр данных со средним значением и стандартные ошибки для всех видов.
3D bar plot from the code above
Я прошу прощения, если это глупый вопрос, я новичок в г и на этот форум.
С уважением,
DaveTurek - код для myColoursTrans (ниже), я просто скопировать и вставить данные в это окно (кажется немного неаккуратно)?
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)
Вы должны предоставить свои данные. Вставьте вывод из 'dput (dd)'. Я предполагаю, что это не слишком долго. Также должен поставлять 'myColoursTrans'. – DaveTurek
Добавил данные, надеюсь, что вы не получили уведомление каждый раз, когда я редактировал сообщение! – DBolt
Нет, просто уведомили о ваших комментариях. Может быть, беспорядочно, но 'dd <- structure (list (AgeCage ...' дает нам ваши данные, чтобы мы могли воспроизвести ваш сюжет. Никаких обещаний, но я посмотрю, смогу ли я попробовать несколько идей. – DaveTurek