r barplot降序,矩阵数据为一列

时间:2017-03-19 19:30:30

标签: r matrix dataframe bar-chart

我有一个矩阵数据:

data <- prop.table(df,2)*100

   [,1]
FR 63.60582
US 15.90146
DE 10.07839
UK 10.41433

我做了一个条形图:

barplot(data ,beside=TRUE,legend.text=T,
        ylim=c(0,100),ylab="Percentages",
        args.legend = list(x ='topright', bty='n', inset=c(-0.5,0)))

没有订购降序,所以我尝试按顺序排序:

data <- data [order(data $V1),]

我得到了:

Error in data$V1 : $ operator is invalid for atomic vectors

所以我尝试转换为dataframe:

data <- as.data.frame(data)

然后用它做一个条形图,但我得到了:

Error in barplot.default(data, beside = TRUE, legend.text = T, ylim = c(0,  : 
  'height' must be a vector or a matrix

我的印象是我在这里陷入了恶性循环。有人能让我摆脱这种混乱吗?感谢。

更新

dput(data)给了我:

structure(c(63.6058230683091, 15.9014557670773, 10.0783874580067, 
10.4143337066069), .Dim = c(4L, 1L), .Dimnames = list(c("FR", 
"US", "DE", "UK"), NULL))

1 个答案:

答案 0 :(得分:1)

您获得Error in data$V1 : $ operator is invalid for atomic vectors的原因是因为您无法将$运算符用于矩阵。如果您想按特定列进行排序,可以执行以下操作:data[order(data[,1]),] - 这将按第一列排序。它也适用于字符向量。

要使用您发布的数据回答您的问题,这应该有效:

barplot(data[order(data[,1]),] ,beside=TRUE,legend.text=T,
        ylim=c(0,100),ylab="Percentages",
        args.legend = list(x ='topright', bty='n', inset=c(-0.5,0)))

enter image description here