使用条形图函数 R 绘制间隔
Plotting intervals with barplot function R
我正在使用这个问题中的解决方案来尝试绘制具有指定间隔的条形图:
Create categorical variable in R based on range
我创建了我的间隔并尝试在 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
我不知道如何修复错误。有没有更简单的方法来为条形图制作这样的垃圾箱,或者有人对如何使间隔与条形图一起工作有任何建议吗?
谢谢!
我以前没有使用过 shingle
函数,但它似乎是为创建瓦状图而不是条形图而设置的,尽管可能有一种我不知道的方法的创建带瓦对象的条形图。无论如何,下面的代码显示了如何使用基本图形 lattice
或 ggplot2
创建条形图,但使用 cut
函数创建 bins。
关于您收到的错误需要注意的问题:barplot
是基本图形函数。它期望将条形高度值的数字向量作为其第一个参数。但是 shx
是一个瓦对象,而不是高度向量,因此是错误的。原则上,有人可以为 barplot
编写一个 "shingle method",这将使 barplot
return 来自 shingle
对象的条形图,但这样的方法不会目前存在并且没有必要,因为还有其他 "standard" 方法可以创建条形图。
如下所示,绘制 shingle
对象的方法是调用通用 plot
函数,因为 plot
"knows" 当它接收到 shingle
对象,它应该 return 一个 lattice
叠层图。如果你 运行 methods(plot)
你会看到 plot
有几十个 "methods" (包括 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()
我正在使用这个问题中的解决方案来尝试绘制具有指定间隔的条形图:
Create categorical variable in R based on range
我创建了我的间隔并尝试在 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
我不知道如何修复错误。有没有更简单的方法来为条形图制作这样的垃圾箱,或者有人对如何使间隔与条形图一起工作有任何建议吗?
谢谢!
我以前没有使用过 shingle
函数,但它似乎是为创建瓦状图而不是条形图而设置的,尽管可能有一种我不知道的方法的创建带瓦对象的条形图。无论如何,下面的代码显示了如何使用基本图形 lattice
或 ggplot2
创建条形图,但使用 cut
函数创建 bins。
关于您收到的错误需要注意的问题:barplot
是基本图形函数。它期望将条形高度值的数字向量作为其第一个参数。但是 shx
是一个瓦对象,而不是高度向量,因此是错误的。原则上,有人可以为 barplot
编写一个 "shingle method",这将使 barplot
return 来自 shingle
对象的条形图,但这样的方法不会目前存在并且没有必要,因为还有其他 "standard" 方法可以创建条形图。
如下所示,绘制 shingle
对象的方法是调用通用 plot
函数,因为 plot
"knows" 当它接收到 shingle
对象,它应该 return 一个 lattice
叠层图。如果你 运行 methods(plot)
你会看到 plot
有几十个 "methods" (包括 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()