1

非常愚蠢的问题,但我在网上找不到答案:

需要像这样一起绘制多个条形图:

 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)是否可以在图表中保持恒定的条形宽度?我尝试了宽度,但它似乎不起作用,我想让它在图表之间保持不变和固定。

谢谢

编辑:对于 2)我知道您可以添加零,以便所有图形都涉及相同数量的类,但是由于我在一个 for 循环中进行绘图,我已删除该循环以使示例更简单,我宁愿使用另一种方式做到这一点,如果可能的话。再次感谢

4

2 回答 2

1

可能只是为了您的示例,您将每个图的数据保存在单独的向量中。无论如何,如果位置的数量要大得多,您的工作空间很快就会被小向量弄得一团糟,您将不得不table多次barplot调用。

无论您是使用baseR 函数还是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)

在此处输入图像描述

于 2013-09-22T12:34:43.900 回答
0

查看xlimandylim中描述的参数?barplot

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

在此处输入图像描述

xlimwidth相互影响。)

于 2013-09-22T08:39:00.187 回答