繁体   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