簡體   English   中英

R:帶有ggplot2包或barplot函數以給定角度書寫的圖例和標簽的框

[英]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

您可能是對的, ggplotlattice將成為首選解決方案; 這是一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM