我有一个矩阵数据:
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))
答案 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)))