2015-10-06 2 views
0

У меня есть следующие данные:ggplot2 высота position_dodge не работает

simres_auc2 <- structure(list(MINDGDP = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L), PSIZE = c(5L, 5L, 5L, 5L, 10L, 10L, 
10L, 10L, 20L, 20L, 20L, 20L, 50L, 50L, 50L, 50L, 5L, 5L, 5L, 
5L, 10L, 10L, 10L, 10L, 20L, 20L, 20L, 20L, 50L, 50L, 50L, 50L, 
5L, 5L, 5L, 5L, 10L, 10L, 10L, 10L, 20L, 20L, 20L, 20L, 50L, 
50L, 50L, 50L), simno = c(13L, 13L, 13L, 13L, 16L, 16L, 16L, 
16L, 19L, 19L, 19L, 19L, 22L, 22L, 22L, 22L, 13L, 13L, 13L, 13L, 
16L, 16L, 16L, 16L, 19L, 19L, 19L, 19L, 22L, 22L, 22L, 22L, 13L, 
13L, 13L, 13L, 16L, 16L, 16L, 16L, 19L, 19L, 19L, 19L, 22L, 22L, 
22L, 22L), METHOD_RED = c("EVA (alpha = 0.001)", "EVA (alpha = 0.005)", 
"EVA (alpha = 0.01)", "EVA (alpha = 0.05)", "EVA (alpha = 0.001)", 
"EVA (alpha = 0.005)", "EVA (alpha = 0.01)", "EVA (alpha = 0.05)", 
"EVA (alpha = 0.001)", "EVA (alpha = 0.005)", "EVA (alpha = 0.01)", 
"EVA (alpha = 0.05)", "EVA (alpha = 0.001)", "EVA (alpha = 0.005)", 
"EVA (alpha = 0.01)", "EVA (alpha = 0.05)", "EVA (alpha = 0.001)", 
"EVA (alpha = 0.005)", "EVA (alpha = 0.01)", "EVA (alpha = 0.05)", 
"EVA (alpha = 0.001)", "EVA (alpha = 0.005)", "EVA (alpha = 0.01)", 
"EVA (alpha = 0.05)", "EVA (alpha = 0.001)", "EVA (alpha = 0.005)", 
"EVA (alpha = 0.01)", "EVA (alpha = 0.05)", "EVA (alpha = 0.001)", 
"EVA (alpha = 0.005)", "EVA (alpha = 0.01)", "EVA (alpha = 0.05)", 
"EVA (alpha = 0.001)", "EVA (alpha = 0.005)", "EVA (alpha = 0.01)", 
"EVA (alpha = 0.05)", "EVA (alpha = 0.001)", "EVA (alpha = 0.005)", 
"EVA (alpha = 0.01)", "EVA (alpha = 0.05)", "EVA (alpha = 0.001)", 
"EVA (alpha = 0.005)", "EVA (alpha = 0.01)", "EVA (alpha = 0.05)", 
"EVA (alpha = 0.001)", "EVA (alpha = 0.005)", "EVA (alpha = 0.01)", 
"EVA (alpha = 0.05)"), auc = c(0.5, 0.440423333333333, 0.73412, 
0.570526, 0.5, 0.465404, 0.695695333333333, 0.536143333333333, 
0.5, 0.482674, 0.673217333333333, 0.517231333333333, 0.5, 0.478126666666667, 
0.661129333333333, 0.530846, 0.5, 0.4520975, 0.742583, 0.577082, 
0.5, 0.4546035, 0.694907, 0.550087, 0.5, 0.4706495, 0.6585825, 
0.544709, 0.5, 0.473219, 0.659395, 0.546985, 0.5, 0.45364, 0.754459333333333, 
0.58385, 0.5, 0.442713333333333, 0.699316, 0.563635333333333, 
0.5, 0.486780666666667, 0.678044666666667, 0.554051333333333, 
0.5, 0.462297333333333, 0.651185333333333, 0.544234666666667)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -48L), .Names = c("MINDGDP", 
"PSIZE", "simno", "METHOD_RED", "auc")) 

Следующий код генерирует следующий участок, где position_dodge работает правильно.

ggplot2::ggplot(data = simres_auc2, 
          aes_string(x = "factor(METHOD_RED)", 
            y = "auc")) + 
ggplot2::geom_point(aes_string(shape = "factor(MINDGDP)", 
           group = "factor(MINDGDP)", 
           colour = paste0("factor(PSIZE)")), 
        position = position_dodge(width = 0.25)) 

Position_dodge works correctly

Однако, я хочу factor(METHOD_RED) на оси у, и auc на оси х. Следовательно, в следующем коде я заменил x и y и заменил width на position_dodge на height.

ggplot2::ggplot(data = simres_auc2, 
         aes_string(y = "factor(METHOD_RED)", 
            x = "auc")) + 
    ggplot2::geom_point(aes_string(shape = "factor(MINDGDP)", 
          group = "factor(MINDGDP)", 
          colour = paste0("factor(PSIZE)")), 
        position = position_dodge(height = 0.25)) 

Однако этот код дает следующий сюжет, в котором position_dodge не работает, как я надеялся.

Position_dodge does not work as I had hoped

Кто-нибудь знает, почему это так, и как я могу обойти проблему? Обратите внимание, что использование coord_flip для меня не является вариантом, так как оно отрицательно влияет на огранку, которую я хочу использовать в коде. См., Например, this question и this Github issue.

+0

Я не думаю, что вы можете легко избежать 'coord_flip' здесь. Если это «отрицательно влияет на огранку», вы должны привести полный пример, иллюстрирующий это. – Roland

+0

См. Ссылки, которые я добавил. – AJP123

+1

Я бы использовал 'coord_flip' и построил свой сюжет, используя' gridExtra :: grid.arrange'. – Roland

ответ

0

Возможное решение вашей проблемы может быть с помощью position_jitter и используя width из 0 и height из 0.25:

ggplot(data = simres_auc2, aes(y = factor(METHOD_RED), x = auc)) + 
    geom_point(aes(shape = factor(MINDGDP), group = factor(MINDGDP), colour = factor(PSIZE)), 
      position = position_jitter(width = 0, height = 0.25)) 

, который дает:

enter image description here

+0

Пожалуйста, перечитайте мой вопрос: «Обратите внимание, что использование параметра« coord_flip »для меня не является вариантом, поскольку оно отрицательно влияет на огранку, которую я хочу использовать в коде». – AJP123

+0

@ AJP123 См. Мой ответ на вопрос. Это то, что вы ищите? – Jaap

+0

Нет. Я хочу использовать 'position_dodge', потому что я хочу уклониться от фигур в сюжете в соответствии с их группой. – AJP123

0

Вы можете использовать непрерывную у масштабировать и вручную сопоставлять позиции y различным группам данных.

RANGE <- .5 

ggplot(data = simres_auc2, aes(y = as.integer(factor(METHOD_RED)), x = auc)) + 
    geom_point(aes(y = as.integer(factor(METHOD_RED)) + 
        RANGE *(-.5+(as.integer(factor(MINDGDP))-1)/(length(unique(MINDGDP))-1)), 
       shape = factor(MINDGDP), group = factor(MINDGDP), 
       colour = factor(PSIZE, levels = sort(unique(PSIZE)))), size = 4) + 
    scale_y_continuous(labels = function(x) levels(factor(simres_auc2$METHOD_RED))[x]) + 
    guides(color = guide_legend(title = "PSIZE"), shape = guide_legend(title = "MINDGDP")) 

enter image description here

Смежные вопросы