[英]R: A box for the legends and labels written at a given angle with ggplot2 package or barplot function
我的問題肯定是重復的,但我無法弄清楚如何實現我的目標。
這是我的數據:
v1=c(46.55172, 13.79310, 29.31034, 1.72414, 5.17241, 3.44828, 0.00000, 0.60241, 24.09639, 59.63855, 4.81928, 6.02410, 0.00000, 4.81928, 14.58333, 22.91667, 58.33333, 0.00000, 2.08333, 2.08333, 0.00000, 20.96774, 20.96774, 47.58065, 5.64516, 3.22581, 0.80645, 0.80645)
names(v1) = c('Simul','SE','Obs','CG','Double','LR','RM','Simul','SE','Obs','CG','Double','LR','RM','Simul','SE','Obs', 'CG','Double','LR','RM','Simul','SE','Obs','CG', 'Double','LR','RM')
前7個數字對應第一個“新聞”,8到14個數字對應第二個“新聞”,依此類推。
每個日志的七個數字分別命名為Simul,SE,Obs,CG,Double,LR,RM。 我希望這些數字分別代表小節中七個小節的高度,並且我希望這四個日志位於同一窗口中。 我當前的腳本是這樣做的。
par(mfrow=c(2,2))
for (journal in 0:3){
if (journal == 0) { journal.name = 'American Naturalist'}
if (journal == 1) { journal.name = 'Animal Behavour'}
if (journal == 2) { journal.name = 'Ecology Letters'}
if (journal == 3) { journal.name = 'Evolution'}
barplot(v1[((journal*7)+1):((journal*7)+7)],ylim=c(0,60),main=journal.name)
}
mtext('Frequency',padj=2,side=2,outer=T)
mtext('Articles Type',padj=-2,side=1,outer=T)
我現在要...
1) 傳說
...在右側添加一個框(以及該框的空格),以便添加一些帶有縮寫含義的圖例(Simul,SE,OBS等)。
2) 文字角度
...以45°的角度寫出縮寫(Simul,SE,OBS等)。
我想實現這些目標的最好方法是使用ggplot,但是歡迎任何答案類型!
非常感謝 !
對於初學者,我建議重塑您的當前數據( v1
)以適合ggplot2
df = do.call("rbind",lapply(unique(names(v1)),function(x){v1[names(v1)==x]}))
rownames(df) = unique(names(v1))
colnames(df) = c("American Naturalist","Animal Behavour","Ecology Letters","Evolution")
head(df)
American Naturalist Animal Behavour Ecology Letters Evolution
Simul 46.55172 0.60241 14.58333 20.96774
SE 13.79310 24.09639 22.91667 20.96774
Obs 29.31034 59.63855 58.33333 47.58065
CG 1.72414 4.81928 0.00000 5.64516
Double 5.17241 6.02410 2.08333 3.22581
LR 3.44828 0.00000 2.08333 0.80645
現在,使用reshape2
:
head(melt(df))
Var1 Var2 value
1 Simul American Naturalist 46.55172
2 SE American Naturalist 13.79310
3 Obs American Naturalist 29.31034
4 CG American Naturalist 1.72414
5 Double American Naturalist 5.17241
6 LR American Naturalist 3.44828
接下來,一個基本的ggplot2
條形圖:
p = ggplot(melt(df)) + geom_bar(aes(x=Var1,y=value, fill=Var1), stat="identity") + facet_wrap(~Var2)
軸標簽角度:
p <- p + theme(axis.text.x = element_text(angle = 45))
我想您可以通過在labs
中添加有關軸標簽的解釋來建立此基礎。
正如@Aaron所說,最好將情節轉過來:
p + coord_flip()
好的,一方面,讓我們將數據放在一個矩陣中。 太難追蹤了!
v2 <- matrix(v1, nrow=7)
rownames(v2) <- c('Simul','SE','Obs','CG','Double','LR','RM')
colnames(v2) <- c('American Naturalist','Animal Behavour','Ecology Letters','Evolution')
v2
# American Naturalist Animal Behavour Ecology Letters Evolution
# Simul 46.55172 0.60241 14.58333 20.96774
# SE 13.79310 24.09639 22.91667 20.96774
# Obs 29.31034 59.63855 58.33333 47.58065
# CG 1.72414 4.81928 0.00000 5.64516
# Double 5.17241 6.02410 2.08333 3.22581
# LR 3.44828 0.00000 2.08333 0.80645
# RM 0.00000 4.81928 0.00000 0.80645
您可能是對的, ggplot
或lattice
將成為首選解決方案; 這是一個lattice
。
library(lattice)
library(reshape2)
v3 <- melt(v2)
names(v3) <- c("Variable", "Journal", "Frequency")
barchart(Variable~Frequency|Journal, data=v3, as.table=TRUE)
請注意,我已經將條形圖水平放置,這樣可以輕松地閱讀每個條形圖的標簽。 最好是將它們傾斜一個角度並給聽眾帶來頸部疼痛。 這也使得僅使用這些名稱的全名而不是縮寫就成為可能,而不是將其放在圖例中並給您的觀眾帶來鞭打感。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.