[英]Resize side-by-side multiple barplots in R
我使用這個答案在一個 PDF 頁面中繪制了 15 個條形圖(並排)。 問題是數字質量變得非常小。
dat <- read.table("data.txt",header=TRUE)
pdf('plot.pdf')
m <- rbind(c(1,2,3), c(4,5,6),c(7,8,9),c(10,11,12),c(13,14,15))
layout(m)
barcols <- c("red","blue","green","orange","black","yellow")
sp <- split(dat, dat$Project)
sapply(seq_along(sp),
function(x) {
dd <- sp[[x]]
m <- t(`rownames<-`(as.matrix(dd[, -(1:2)]), dd[, 1]))
bp <- barplot(m,ylim=c(0, 0.4),beside=TRUE,col=barcols)
title(main=names(sp[x]))
# abline(h=0)
}
)
plot(NA,xlim=c(0,1),ylim=c(0,1),ann=FALSE,axes=FALSE)
legend(0,0.6,c("C10","C10","C03","C11","C16","C08"),fill=barcols,cex=1.5)
dev.off()
是否可以調整圖形大小,以使 x 軸數據可讀?
數據格式如下:
Topic Project C10 C14 C03 C11 C16 C08
T1 P1 0.24 0.00 0.00 0.04 0.04 0.00
T2 P1 0.00 0.30 0.00 0.00 0.00 0.00
T3 P1 0.04 0.04 0.00 0.24 0.00 0.00
T4 P1 0.00 0.00 0.00 0.04 0.33 0.04
T5 P1 0.00 0.09 0.21 0.00 0.00 0.00
T6 P1 0.00 0.09 0.00 0.00 0.00 0.34
T1 P2 0.20 0.00 0.00 0.04 0.00 0.04
T2 P2 0.00 0.22 0.04 0.00 0.00 0.00
T3 P2 0.04 0.00 0.00 0.24 0.00 0.00
T4 P2 0.00 0.00 0.04 0.00 0.33 0.00
T5 P2 0.04 0.00 0.21 0.00 0.00 0.00
T6 P2 0.00 0.04 0.00 0.00 0.00 0.34
T1 P3 0.20 0.00 0.00 0.04 0.00 0.04
T2 P3 0.00 0.22 0.04 0.00 0.00 0.00
T3 P3 0.04 0.00 0.00 0.24 0.00 0.00
T4 P3 0.00 0.00 0.04 0.00 0.33 0.00
T5 P3 0.04 0.00 0.21 0.00 0.00 0.00
T6 P3 0.00 0.04 0.00 0.00 0.00 0.34
...
...
以下是使用ggplot2
或lattice
。 這些包處理“長格式”數據。 對於您的數據集,這意味着將第 3 列到第 8 列的值堆疊成一列,第二列表示組的名稱(即原始列的名稱,例如C10
、 C14
等)。
tidyr
便於整形為長格式:
d <- read.table(text='Topic Project C10 C14 C03 C11 C16 C08
T1 P1 0.24 0.00 0.00 0.04 0.04 0.00
T2 P1 0.00 0.30 0.00 0.00 0.00 0.00
T3 P1 0.04 0.04 0.00 0.24 0.00 0.00
T4 P1 0.00 0.00 0.00 0.04 0.33 0.04
T5 P1 0.00 0.09 0.21 0.00 0.00 0.00
T6 P1 0.00 0.09 0.00 0.00 0.00 0.34
T1 P2 0.20 0.00 0.00 0.04 0.00 0.04
T2 P2 0.00 0.22 0.04 0.00 0.00 0.00
T3 P2 0.04 0.00 0.00 0.24 0.00 0.00
T4 P2 0.00 0.00 0.04 0.00 0.33 0.00
T5 P2 0.04 0.00 0.21 0.00 0.00 0.00
T6 P2 0.00 0.04 0.00 0.00 0.00 0.34
T1 P3 0.20 0.00 0.00 0.04 0.00 0.04
T2 P3 0.00 0.22 0.04 0.00 0.00 0.00
T3 P3 0.04 0.00 0.00 0.24 0.00 0.00
T4 P3 0.00 0.00 0.04 0.00 0.33 0.00
T5 P3 0.04 0.00 0.21 0.00 0.00 0.00
T6 P3 0.00 0.04 0.00 0.00 0.00 0.34', header=TRUE)
library(tidyr)
d2 <- gather(d, Variable, Value, -Topic, -Project)
head(d2)
## Topic Project Variable Value
## 1 T1 P1 C10 0.24
## 2 T2 P1 C10 0.00
## 3 T3 P1 C10 0.04
## 4 T4 P1 C10 0.00
## 5 T5 P1 C10 0.00
## 6 T6 P1 C10 0.00
然后,使用ggplot2
:
library(ggplot2)
ggplot(d2, aes(x=Topic, y=Value, fill=Variable)) +
geom_bar(stat='identity', position='dodge') +
facet_wrap(~Project)
或者用lattice
:
library(lattice)
barchart(Value~Topic|Project, d2, groups=Variable, origin=0)
以上兩者都是高度可定制的。 請參閱ggplot2
文檔和?lattice::barchart
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.