Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Discrete axis ticks and labels shifted compared to actual values

Tags:

r

ggplot2

I have a dataset as follows: I have a data frame like this, called 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))

I want to plot a boxplot of a value for each time point and group.

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))

This results in the following picture, which is almost right: enter image description here However, the x axis labels and ticks are shifted. How do I put it where it belongs?

like image 235
JelenaČuklina Avatar asked Dec 19 '22 23:12

JelenaČuklina


1 Answers

You are trying to treat a factor like a numeric, which it isn't. Here is a better solution:

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

like image 168
Roland Avatar answered Apr 30 '23 19:04

Roland