我的数据看起来像:
0.2 0.8 val1
0.3 0.7 val1
0.9 0.1 val1
0.22 0.78 val2
0.30 0.70 val3
0.00 1.00 val3
我想要的是一个条形图,其中每一行都绘制为自己的条形图,但在 x 轴的名称中,我不想要“val1”3 次,我只想要一次并集中(相对于val1 吧)。我用谷歌搜索了很多,但不知道老实说用谷歌搜索什么。
barplot(t(as.matrix(dat[1:2])),
names.arg=c("",as.character(dat$V3[2]),"", as.character(dat$V3[4:6])))
另一种ggplot
选择:
df <- read.table(text = "
0.2 0.8 val1
0.3 0.7 val1
0.9 0.1 val1
0.22 0.78 val2
0.30 0.70 val3
0.00 1.00 val3")
names(df) <- c("y1", "y2", "x1")
df$x2 <- 1:nrow(df)
df2 <- melt(df, id.vars = c("x1", "x2"))
xlabs <- ddply(.data = df, .variables = .(x1), summarize, xval = median(x2))
labs$x1 <- labs$x1
ggplot(data = df2, aes(x = x2, y = value, fill = variable)) +
geom_bar(stat = "identity") +
scale_x_continuous(breaks = labs$xval, labels = labs$x1) +
xlab("")
> mydata
col1 col2 variable
1 0.20 0.80 val1
2 0.30 0.70 val1
3 0.90 0.10 val1
4 0.22 0.78 val2
5 0.30 0.70 val3
6 0.00 1.00 val3
library(ggplot2)
mm <- ddply(mydata, .(variable), summarise, mecol1 = mean(col1),mecol2=mean(col2))
ggplot(mm, aes(x = factor(variable), y = mecol1)) + geom_bar(stat = "identity")
ggplot(mm, aes(x = factor(variable), y = mecol2)) + geom_bar(stat = "identity")
可能是这样的?
dat <- read.table(text="0.2 0.8 val1
0.3 0.7 val1
0.9 0.1 val1
0.22 0.78 val2
0.30 0.70 val3
0.00 1.00 val3",header=FALSE)
bp <- barplot(t(as.matrix(dat[1:2])))
axis(1,at=tapply(bp,dat[,3],mean),labels=unique(dat[,3]))
不过,我不知道您将如何区分哪个标签属于哪个条 - 结果确实与“ 6 个不同的条但 x 轴上有 3 个标签”很混淆。
为避免分组混淆,您始终可以执行以下操作:
bp <- barplot(t(as.matrix(dat[1:2])))
mapply(
function(a,b,c) axis(1,at=c(a,b,c),labels=FALSE),
tapply(bp,dat[,3],tail,1),
tapply(bp,dat[,3],head,1),
tapply(bp,dat[,3],mean)
)
axis(1,at=tapply(bp,dat[,3],mean),labels=unique(dat[,3]),lwd=NA)