我在R中有一个数据框df,如下所示:
D C B E K R
Rd 80 80 80 80 80 80
Sw 100 100 100 100 100 100
Sf 100 100 100 100 100 100
我正在尝试在条形图中绘制数据。我需要y轴的范围是0-100,x轴是类别名称。基本上,我需要它看起来像这样:
100 | _ _ _ _ _ _ _ _ _ _ _ _
|_ _ _ _ _ _ | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | |
0 |_|_|_|_|_|_|__|_|_|_|_|_|_|__|_|_|_|_|_|_|_
D C B E K R D C B E K R D C B E K R
Rd Sw Sf
所有Ds颜色相同,所有Cs颜色相同,依此类推。
我不知道该怎么做,或者使用哪些库。
到目前为止,我有:
counts <- as.matrix(df$D, df$C, df$B, df$E, df$K, df$R)
barplot(counts, beside = TRUE, space = c(0, 0, 0, 0, 0, 0), xlab = "",
col = c("coral", "coral1", "coral2", "coral3", "coral4", "cornflowerblue"),
names.arg = c("D", "C", "B", "E", "K", "R"))
mtext(side = 1, text = "x label", line = 7)
但它只显示如下内容:
100 | _ _ _ _
|_| | |_| | |
| | | | | | |
| | | | | | |
| | | | | | |
0 |_|_|_|_|_|_|_
D C B E K R
x label
我不知道为什么我只得到这个。
非常感谢任何帮助。
答案 0 :(得分:4)
试试这个:
df2 <- t(as.matrix(df))
bp <- barplot(df2,beside=TRUE,col=1:6)
mtext(rownames(df2),1,at=bp)
如果您想编辑旋转轴标签的内容或准确定位组/条标签,那么您可以执行类似下面的代码。更改line=
参数以影响标签的垂直位置,并在las=1
调用上更改barplot
参数,以根据需要旋转标签。
df2 <- t(as.matrix(df))
bp <- barplot(df2,beside=TRUE,col=1:6,axisnames=FALSE,las=1)
mtext(rownames(df2),1,at=bp,line=0.6)
mtext(colnames(df2),1,at=colMeans(bp),line=2)
答案 1 :(得分:4)
set.seed(1)
df <- data.frame(groups = rep(c("Rd", "Sw", "Sf"), each=6),
bars = rep(c("D", "C", "B", "E", "K", "R"), 3),
values = sample(1:100,18))
library(ggplot2)
ggplot(df, aes(x=bars, y=values, fill=bars)) +
geom_bar(stat="identity", position="dodge") +
facet_wrap(~groups, ncol=3)
结果:见下图。
或者,如果您从问题中获取数据框:
df <- read.table(sep=" ", header=T, text="
D C B E K R
Rd 80 80 80 80 80 80
Sw 100 100 100 100 100 100
Sf 100 100 100 100 100 100")
df$facet <- row.names(df)
library(reshape2)
df.long <- melt(df, "facet")
ggplot(df.long, aes(x=variable, y=value, fill=variable)) +
geom_bar(stat="identity", position="dodge") +
facet_wrap(~facet, ncol=3)
答案 2 :(得分:0)
看起来你不希望as.matrix调用data.frame中的列向量 - 你很可能想要:as.matrix(D),例如:
barplot(as.matrix(data.frame(rpois(10, 2), rpois(10, 1))), beside = T)
基本上,我给出一个简单的例子,假设你有:
df = data.frame(x = c(1,2,3), y = c(2,3,4))
你正在做as.matrix(df $ x,df $ y) - 这不是你想要的,你想做的:as.matrix(df),因此:
barplot(as.matrix(df), beside = T)
会给你你想要的东西。关键是要看看“as.matrix”的作用。