2015-10-21 2 views
4

У меня есть набор данных следующим образом: у меня есть такой кадр данных, который называется data_frame_test.Дискретные оси тиков и меток сдвинуты по сравнению с фактическими значениями

 Value time group 
    3.96655960  0  184 
    -8.71308460  0  184 
-11.11638947  0  184 
    -6.84213562  11  184 
    -1.25926609  11  184 
    -4.60649529  11  184 
    0.27577858  11  184 
    11.85394249  20  184 
    -0.27114563  20  184 
    1.73081284  20  184 
    1.78209915  20  184 
    11.34305840  20  184 
    13.49688263  20  184 
    -7.54752045  20  184 
-13.63673286  25  184 
    -5.75711517  25  184 
    0.35823669  25  184 
    -2.45237694  25  184 
    0.49313087  0  66 
    -9.04148674  0  66 
-15.50337906  0  66 
-17.51445351  0  66 
-10.66807098  0  66 
    -2.24337845  5  66 
-13.79929533  5  66 
    1.33287125  5  66 
    2.22143402  5  66 
    11.46484833  10  66 
    23.26805916  10  66 
    9.07377968  10  66 
    4.28664665  10  66 

data_frame_test <- structure(list(Value = c(3.9665596, -8.7130846, -11.11638947, 
-6.84213562, -1.25926609, -4.60649529, 0.27577858, 11.85394249, 
-0.27114563, 1.73081284, 1.78209915, 11.3430584, 13.49688263, 
-7.54752045, -13.63673286, -5.75711517, 0.35823669, -2.45237694, 
0.49313087, -9.04148674, -15.50337906, -17.51445351, -10.66807098, 
-2.24337845, -13.79929533, 1.33287125, 2.22143402, 11.46484833, 
23.26805916, 9.07377968, 4.28664665), time = c(0L, 0L, 0L, 11L, 
11L, 11L, 11L, 20L, 20L, 20L, 20L, 20L, 20L, 20L, 25L, 25L, 25L, 
25L, 0L, 0L, 0L, 0L, 0L, 5L, 5L, 5L, 5L, 10L, 10L, 10L, 10L), 
    group = c(184L, 184L, 184L, 184L, 184L, 184L, 184L, 184L, 
    184L, 184L, 184L, 184L, 184L, 184L, 184L, 184L, 184L, 184L, 
    66L, 66L, 66L, 66L, 66L, 66L, 66L, 66L, 66L, 66L, 66L, 66L, 
    66L)), .Names = c("Value", "time", "group"), class = "data.frame", row.names = c(NA, 
-31L)) 

Я хочу построить квадратный квадрат значения для каждой временной точки и группы.

ggplot(data_frame_test, aes(x=factor(time), y=Value, colour = factor(group))) + 
    geom_boxplot(outlier.size=0, fill = "white", position="identity", alpha=.5) + 
    scale_x_discrete(limits = seq(-1,26), breaks = seq(-1,26), labels = seq(-1,26)) 

Это приводит к следующей картине, которая почти сразу: enter image description here Однако х метки осей и тики сдвинуты. Как я могу разместить его там, где он принадлежит?

ответ

5

Я не совсем уверен, почему это происходит, но я бы, вероятно, сделать сюжет, как это, так как преобразование времени фактор является интуитивно понятным мне:

ggplot(data_frame_test, 
     aes(x = time, y=Value, colour = factor(group), group = interaction(time, group))) + 
    geom_boxplot(outlier.size=0, fill = "white", position="identity", alpha=.5) 

Что дает:

enter image description here

Вы можете использовать scale_x_continuous, чтобы изменить условия перерыва.

+1

Да, это на самом деле лучше, чем мой ответ, если вы не имеете фактор, чтобы начать с. Просто добавьте 'scale_x_continuous (breaks = -1: 26)' в конце. – Roland

+0

О, я вижу трюк, который заставляет его работать: 'group = взаимодействие (время, группа)'. На самом деле это вопрос, который мне пришлось разделить еще на два вопроса: http://stackoverflow.com/questions/25033007/overlay-box-plots-using-ggplot –

6

Вы пытаетесь рассматривать фактор как числовое, которого нет. Вот лучшее решение:

ggplot(data_frame_test, aes(x=factor(time, levels = seq(-1,26), ordered = TRUE), 
          y=Value, colour = factor(group))) + 
    geom_boxplot(outlier.size=0, fill = "white", position="identity", alpha=.5) + 
    scale_x_discrete(drop = FALSE) 

resulting plot

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