2013-09-22 1 views
0

Очень глупый вопрос, но я не могу найти ответ в Интернете:несколько barplots в одном графике поддерживать те же оси и ширина же бар

необходимость построить несколько barplots вместе, как это:

i=1:4 
main = paste ("Location ", i) 

windows() 
par(mfrow=c(2,2)) 
a<-table(c(rep(10, 6), rep(4, 32))) 
b<-table(c(rep(9, 6), rep(10, 32), rep(11,4))) 
c<-table(c(rep(10, 6))) 
d<-table(c(rep(10, 3), rep(9, 3), rep(8, 5))) 

barplot(a, main=main[1], xlab='RSSI') 
barplot(b, main=main[2], xlab='RSSI') 
barplot(c, main=main[3], xlab='RSSI')#, width=0.5 
barplot(d, main=main[4], xlab='RSSI') 

1) можно ли поддерживать постоянную шкалу осей, так что она одинакова на каждом графике?

2) Можно ли поддерживать постоянную ширину полосы на графиках? Я пробовал с шириной, но она не работает, и я хотел бы, чтобы она была постоянной и фиксировалась между графиками.

Благодаря

EDIT: для 2) Я знаю, что вы можете добавить нули, так что все графики имеют одинаковое число классов, участвующих, но так как я черчения в цикле, который я снял, чтобы сделать пример проще, я бы предпочел использовать другой способ сделать это, если это возможно. Еще раз спасибо

+0

Небольшой боковой примечание: может быть, я неправильно понял, но не было бы легче сравнивать различные места, если у вас одни и те же классы для каждого место нахождения. Извините, если я не понимаю ваши цели. – Henrik

+0

Я не уверен, что полностью понимаю вас, вы спрашиваете, почему я не «инвертирую x и y»? Если это так, меня интересует локальное поведение переменной, которая является дискретной, проверка того, как значение = 44 ведет себя пространственно по сравнению со значением = 45, просто не представляет интерес явление. Получил ли я ваше мнение? – Irene

+0

Извините, если я не понял. В вашем вопросе, который вы написали, вы знаете, как сделать «все графики имеют одинаковое количество классов», но вы удалили классы с нулевым числом в примере. Я просто подумал, что, возможно, было бы проще сравнивать подсчеты для разных уровней RSSI среди разных мест, если бы у вас был одинаковый набор классов для каждого местоположения, т. Е. Были включены также классы RSSI с нулевым подсчетом. Но опять же, возможно, я неправильно понял вашу общую цель. Приветствия. – Henrik

ответ

0

Посмотрите на xlim и ylim аргумента, описанным в ?barplot: (. xlim и width влияют друг на друга)

barplot(a, main=main[1], xlab='RSSI', xlim=c(0, 4), ylim=c(0, 32)) 
barplot(b, main=main[2], xlab='RSSI', xlim=c(0, 4), ylim=c(0, 32)) 
barplot(c, main=main[3], xlab='RSSI', xlim=c(0, 4), ylim=c(0, 32)) 
barplot(d, main=main[4], xlab='RSSI', xlim=c(0, 4), ylim=c(0, 32)) 

enter image description here

+0

не знаю, как я пропустил это, спасибо! – Irene

1

Возможно, это было только для ваш пример, что вы сохраняли данные для каждого графика в отдельных векторах. Во всяком случае, если количество мест будет намного больше, вы скоро закроете свое рабочее пространство маленькими векторами, и вам придется много раз звонить table и barplot.

Было бы намного проще работать с данными, хранящимися в кадре данных, независимо от того, если вы используете функции base R или ggplot. Кроме того, может быть проще сравнивать подсчеты для разных уровней RSSI среди разных местоположений, если один и тот же набор классов для каждого местоположения используется в каждом графике, т. Е. Также включены классы RSSI с нулевым числом. Вы также можете использовать один и тот же масштаб оси y в разных местах. Вот небольшой пример с ggplot

library(ggplot2) 

# create a data frame with the data in your vectors 
# 'x' is the value, and 'loc' the location of each registration 
df <- data.frame(x = c(rep(10, 6), rep(4, 32), 
         rep(9, 6), rep(10, 32), rep(11, 4), 
         rep(10, 6), 
         rep(10, 3), rep(9, 3), rep(8, 5)), 
       loc = c(rep("a", 6+32), rep("b", 6+32+4), rep("c", 6), rep("d", 3+3+5))) 

# plot using geom_bar, which default counts the cases for each level of - no need for 'table' 
ggplot(data = df, aes(x = factor(x))) + 
    geom_bar() + 
    facet_wrap(~ loc) 

enter image description here

+0

да я использую dataframe, я использовал векторы, чтобы сделать этот пример максимально читаемым, я все еще борется с ggplot, поэтому спасибо за ваш ответ! – Irene

+1

@ Ирен, рад помочь. Когда я начал с 'ggplot', мне было очень полезно работать с примерами [здесь] (http://www.cookbook-r.com/Graphs/). Удачи! – Henrik

+0

+ 1 для справки – Irene

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