2014-09-04 4 views
1

Я создал barplot с 24 полосами по оси х (0-23) и фона штриховки, используя следующий код:Определение пределов поле вокруг barplot в R

#Data 
Hours = seq(from=0, to=23) 
Mean = rnorm(24, mean=5, sd=2) 

#Create number seq for tick mark locations 
at_tick = seq_len(length(Hours)+1) 

#Plot with background rectangle shading 
x=barplot(Mean,names.arg=Hours, border="white", ylab="Freq", xlab="Hour", 
      ylim=c(0,10), axes=FALSE, space=0, col="grey50") 
X = c(0,5) 
Y = c(0,10) 
rect(X[1], Y[1], X[2], Y[2], border = "gray80", col = "gray80") 
X2 = c(19,24) 
Y2 = c(0,10) 
rect(X2[1], Y2[1], X2[2], Y2[2], border = "gray80", col = "gray80") 
barplot(Mean,names.arg=Hours, ylim=c(0,10), border="white", ylab="", xlab="", axes=FALSE, space=0, col="gray50", add=TRUE) 
axis(2, las=2, pos=0) 
axis(1, at = at_tick -1, pos=0, labels = FALSE) 

box(which="plot", bty="]") #add a box around the plot 

Это создает участок с окружающий ящик, который выходит за пределы оси х в обоих направлениях. Вместо этого я хотел бы добавить квадрат вокруг графика, который выравнивается с пределами оси (т. Е. Ось x: 0-23, ось y: 0-10). Я провел годы, пытаясь найти способ сделать это без везения. Любая помощь могла бы быть полезна. Благодаря!

+0

Что о 'xlim = с (0,23)' в первом вызове на 'barplot'? – nicola

+0

Спасибо, но это предотвращает выделение последней метки метки для бара 23 и не решает проблему с ящиком с левой стороны оси x, то есть поля поля, проходящие ниже x = 0? – jjulip

ответ

2

Как насчет рисования отдельных линий? Вы можете использовать функцию segment вместо box, чтобы сделать это:

segments(24,10, 24,0) 
segments(0,10, 24,10) 

Полный код:

#Data 
Hours = seq(from=0, to=23) 
Mean = rnorm(24, mean=5, sd=2) 

#Create number seq for tick mark locations 
at_tick = seq_len(length(Hours)+1) 

#Plot with background rectangle shading 
x=barplot(Mean,names.arg=Hours, border="white", ylab="Freq", xlab="Hour", 
      ylim=c(0,10), axes=FALSE, space=0, col="grey50") 
X = c(0,5) 
Y = c(0,10) 
rect(X[1], Y[1], X[2], Y[2], border = "gray80", col = "gray80") 
X2 = c(19,24) 
Y2 = c(0,10) 
rect(X2[1], Y2[1], X2[2], Y2[2], border = "gray80", col = "gray80") 
barplot(Mean,names.arg=Hours, ylim=c(0,10), border="white", ylab="", xlab="", axes=FALSE, space=0, col="gray50", add=TRUE) 
axis(2, las=2, pos=0) 
axis(1, at = at_tick -1, pos=0, labels = FALSE) 

segments(24,10, 24,0) 
segments(0,10, 24,10) 

enter image description here

+0

@ ajb. Благодарю. Сегменты работают для верхней границы, но не по какой-либо причине? Какие-либо предложения? – jjulip

+0

hmm работает для меня, я отредактировал свой ответ, чтобы включить точный код и изображение, которое я получаю, когда запускаю его. это то, что вы ищете? вы видите тот же сюжет, когда вы запускаете этот код? – ajb

+1

Спасибо. При дальнейшем осмотре проблема, похоже, связана с использованием сегментов() в окне кварца(). Он отлично работает при использовании графического окна по умолчанию в RStudio. Не уверен, почему это было бы, но ваше решение - отличное решение. Благодаря! – jjulip