2016-07-14 1 views
1

Мой вопрос прост, я думаю, но Гуглинг и суетливость меня ни к чему. Надеюсь, кто-то здесь может помочь. У меня есть данные, которые были собраны из двух разных групп лечения в течение трех лет. Я хочу создать коробку для каждой комбинации лечения и года (чтобы увидеть, влияет ли эффект лечения на год). Однако, я не могу понять, как маркировать оси х, как я хочу, чтобы с помощью ggplot2.Используя ggplot2, как я могу пометить ось x только одним из двух факторов, используемых для создания сгруппированного ящика?

Вот код, который создает некоторые подделать вид данных похож на мою собственную.

fakeX = factor(rep(c(0,1), times=60)) 
fakeY = factor(rep(c(1,2,3), each=40)) 
fakeZ = round(runif(120, 0, 12), digits=1) 
df1 = data.frame(fakeX, fakeY, fakeZ) 
df1$inter = interaction(df1$fakeX, df1$fakeY) 

ggplot(df1, aes(x=inter, y = fakeZ)) + 
stat_boxplot(geom='errorbar', lwd=1.75) + 
geom_boxplot(outlier.size=5, lwd = 1.75, fatten=1.25, 
fill = rep(c("dim gray", "ivory3"), times=3), aes(fill=fakeY)) + 
scale_x_discrete(labels = c("2013", "", "2014", "", "2015", "")) 

Этот код производит набор, как те, присущи рефлективный, вербальный Я ищу:

enter image description here

До сих пор так хорошо. Однако, как вы можете видеть, у меня уже есть методы, обозначенные цветом (заголовок рисунка объяснит, что есть), , поэтому мне просто нужны метки оси, чтобы сказать, в каком году каждый набор из двух ящиков составляет от. Тем не менее, я не могу понять код, который будет получать метки года в центре точно между двумя ящиками, каждый из которых предназначен для, и это то, что я считаю самым ясным. Прямо сейчас, лучшее, что я смог сделать, это поставить ярлык года с первым boxplot с каждого года. Я пробовал использовать аргумент breaks внутри scale_x_discrete, но безрезультатно. Я также пробовал передать position=position_nudge() звонок scale_x_discrete, но это тоже не сработало. Если я добавлю пробелы перед метками оси, тогда я могу подделать то, что ищу, но мне пришлось бы использовать пробную версию и ошибку, чтобы получить количество пробелов, необходимых точно для каждого графика, и кажется, что там должен быть лучшим способом. Есть предположения?

+1

Я думаю, что вы ищете подход больше как 'ggplot (df1, AES (х = fakeY, у = fakeZ)) + geom_boxplot (ОЗ (fill = fakeX), position = "dodge") '. – joran

ответ

1

более конкретный пример, чем мой комментарий выше:

ggplot(df1,aes(x = fakeY,y = fakeZ,fill = fakeX)) + 
    stat_boxplot(geom = "errorbar",position = "dodge",lwd = 1.75) + 
    geom_boxplot(position = "dodge",lwd = 1.75,fatten = 1.25,show.legend = FALSE) + 
    scale_fill_manual(values = c("dim gray", "ivory3")) + 
    scale_x_discrete(labels = c('2013','2014','2015')) 
+0

Удивительный, отлично выглядит. Я сделал одну модификацию: я изменил 'position =" dodge "' как 'stat_boxplot', так и' geom_boxplot' на 'position = position_dodge (1)', так что ящики в течение каждого года были немного разными друг от друга. – Bajcz

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