3

我正在使用这个问题中的解决方案来尝试绘制具有指定间隔的条形图:

根据范围在R中创建分类变量

我创建了我的间隔并尝试在barplot函数中使用它们,但我显然在某处错过了一步,我不确定如何让它工作。这是我的代码和我得到的错误:

> library(lattice)

> a = c(0,10)
> b = c(11,20)
> c = c(21,30)
> d = c(31,40)
> e = c(41,50)
> f = c(51,60)
> g = c(61,70)
> h = c(71,80)
> i = c(81,90)
> j = c(91,100)
> k = c(101,120)
> l = c(121,150)
> m = c(151,200)
> n = c(201,500)
> o = c(501,3600)

> mybins = matrix(rbind(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o), ncol=2)
> shx <- shingle(data5$q3totalScleralLensesFit, intervals=mybins)
> shx
  Intervals:
  min  max count
  1    0   10   140
  2   11   20   117
  3   21   30    78
  4   31   40    31
  5   41   50    72
  6   51   60     5
  7   61   70     6
  8   71   80    28
  9   81   90     3
  10  91  100    49
  11 101  120     7
  12 121  150    28
  13 151  200    25
  14 201  500    61
  15 501 3600    28

> bp <- barplot(shx, main="", xlab="", ylim=c(0,160), ylab="", las=2, cex.names=0.75)

Error in barplot.default(shx, main = "", xlab = "", ylim = c(0, 160),  : 
'height' must be a vector or a matrix

我不知道如何修复错误。有没有一种更简单的方法可以为条形图制作这样的垃圾箱,或者有人对如何使间隔与条形图一起使用有任何建议?

谢谢!

4

1 回答 1

5

我以前没有使用过这个shingle函数,但它似乎是为创建一个木瓦图而不是一个条形图而设置的,尽管我可能不知道有一种方法可以用一个木瓦对象创建一个条形图. 在任何情况下,下面的代码都显示了如何使用基本图形、lattice或来创建条形图ggplot2,但使用cut函数来创建分箱。

就您收到的错误而言,需要注意的一个问题barplot是:基本图形功能。它期望将条形高度值的数字向量作为其第一个参数。但是shx是一个带状物体,而不是一个高度向量,因此是错误的。原则上,有人可以编写一个“shingle 方法”,barplot以便barplot从对象返回条形图shingle,但这种方法目前不存在,也没有必要,因为还有其他“标准”方法来创建条形图阴谋。

如下所示,绘制shingle对象的方法是调用泛型plot函数,因为plot“知道”当它接收到一个shingle对象时,它应该返回一个lattice木瓦图。如果您运行methods(plot),您会看到plot有几十个“方法”(包括plot.shingle)来确定做什么plot,具体取决于提供给plot函数的对象类型。

## Fake data
set.seed(5)
data5 = data.frame(q3totalScleralLensesFit = runif(1000,0,3600))

## Create shingle object

# Easier way to create bins
bins = c(0, seq(11,101,10),121,151,201,501,3601)
mybins = cbind(bins, lead(bins) - 1)[-length(bins),]

shx <- shingle(data5$q3totalScleralLensesFit, intervals=mybins)

格子瓦图

plot(shx)

在此处输入图像描述

现在让我们设置用于创建条形图的数据。我们将使用该cut功能:

# Create bins using cut function
data5$breaks = cut(data5$q3totalScleralLensesFit, 
                   breaks=c(seq(0,100,10),120,150,200,500,3600),
                   include.lowest=TRUE)

基本图形条形图

barplot(table(data5$breaks), horiz=TRUE, las=1)

在此处输入图像描述

lattice条形图

barchart(data5$breaks)

在此处输入图像描述

ggplot2条形图

library(ggplot2)

ggplot(data5, aes(breaks)) +
  geom_bar() + 
  coord_flip() +
  theme_bw()

在此处输入图像描述

于 2016-06-20T16:19:01.977 回答