我刚刚看到这段代码让我绘制了多个纵坐标(我知道它在社区中是一个不好的概念,但我需要这样做来比较不同的指标)。由于这不能在ggplot2中固有地完成,我想知道我是否可以调整以下代码来做我需要的:
twoord.plot(2:10,seq(3,7,by=0.5)+rnorm(9),
1:15,rev(60:74)+rnorm(15),xlab="Sequence",
ylab="Ascending values",rylab="Descending values",
main="Plot with two ordinates - bars on the left",
type=c("bar","l"),lcol=3,rcol=4)
绘制以下内容:
我正在寻找的是将多个条形图并排绘制。我尝试用type=c("bar", "l")
替换type=c("bar", "bar")
,但这给了我重叠的条形码。我想要绘制的确切数据如下:
Category SubCat Value
A Cat1 0.1
B Cat1 0.2
A Cat2 0.3
B Cat2 0.24
A Cat3 13
B Cat3 41
A Cat4 60
B Cat4 146
我希望(Cat1,Cat2)下的(A,B)在左边有刻度,而(Cat3,Cat4)下的(A,B)在右边有刻度,在A和B下有所有条分别组合在一起。有人可以告诉我怎么做吗?
答案 0 :(得分:4)
以下内容可能与您使用ggplot2
时的距离非常接近:
d <- read.table(textConnection("Category SubCat Value
A Cat1 0.1
B Cat1 0.2
A Cat2 0.3
B Cat2 0.24
A Cat3 13
B Cat3 41
A Cat4 60
B Cat4 146"),header = TRUE, sep="")
d$grp <- rep(c('Cat1 - Cat2','Cat3 - Cat4'), each = 4)
ggplot(d,aes(x = Category, y = Value)) +
facet_wrap(~grp, scales = "free_y") +
geom_bar(aes(fill = SubCat), position = "dodge")
通过刻面和允许ggplot2
分别设置轴来实现“双y轴”。我确信使用基本图形可以更接近您想要的东西,但需要更多考虑。
编辑
这是使用twoord.plot
的黑客攻击。采取了相当多的摆弄,但我从来没有使用过这个功能,所以可能有一个更简单的方法:
par(xaxt = "n")
twoord.plot(ly = d$Value[1:4],ry = d$Value[5:8], rx = c(9,11,13,15), lx = c(1,3,5,7),
type = c('bar','bar'),
xlim = c(0,16),
lylim = c(0,0.35),rylim = c(12,150))
par(xaxt="s")
axis(1, at = c(1,3,5,7,9,11,13,15),
labels = paste(d$Category,d$SubCat,sep=""),
las = 3)