将向量绘制为条形图

4

我有一个向量:

x<-c(1,1,1,1,2,3,5,1,1,1,2,4,9)
y<-length(x)

我希望能够将每个值单独绘制,而不是绘制计数。

基本上,每个值都应该在图中单独表示,其中x轴的长度等于y,每个值都在y轴上绘制。

如何使用qplot实现?

对于一个矩阵:

a<-matrix(NA, ncol=3, nrow=100)

a[,1]<-1:100
a[,2]<-rnorm(100)
a[,3]<-rnorm(100)

a<-melt(as.data.frame(a),id.vars="V1")

使用ggplot绘制条形图的代码如下:ggplot(a, aes(seq_along(a), a)) + geom_bar(stat="identity") + facet_wrap(V1)


这绝对不是直方图,而是条形图。 - Carl Witthoft
3个回答

11

使用ggplot2时,将x作为y值,并在x值上创建序列以用作x轴。

ggplot(data.frame(x),aes(seq_along(x),x))+geom_bar(stat="identity")

这里输入图片描述

如果你有矩阵a,需要为每一行制作图形,则需将其融合(melt)并使用variable作为x轴,value作为y轴。

a<-melt(as.data.frame(a),id.vars=1)

ggplot(a,aes(variable,value))+geom_bar(stat="identity")+facet_wrap(~V1)

在此输入图片描述


这很完美,谢谢。如果我有一个矩阵,在其中我想要在单独的绘图中绘制每一行。我能用 facet_wrap 吗? - user1723765
假设我有一个矩阵a,a [,1] = c(1,2,3,4,5,6); a [,2] = runif(6); a [,3] = runif(6)。我想按a [,1]分面,并单独绘制每一行。如何让melt()产生正确的格式? melt(a,id.vars = 1:1)无法完成任务。 - user1723765
你在使用我在答案中提供的代码时是否遇到了这个错误?(在facet_wrap之前有一个波浪符号) - Didzis Elferts

2

您可以不需要显式地创建一个 DataFrame,也可以尝试这个方法:

ggplot() + geom_bar(aes(x=seq_along(x),y=x), stat='identity') + xlab('x') + ylab('y')

enter image description here


1
简单的解决方案:
barplot(x,xlim = c(0,15), ylim = c(0,10))

xlim和ylim会根据向量长度进行缩放


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接