我想绘制一个包含4列的数据框:
Quarters <- c("Q1","Q2","Q3")
Series1 <- c("1%","2%","3%")
Series2 <- c("4%","5%","6%")
Series3 <- c("1000","2000","3000")
df <- data.frame(Quarters,Series1,Series2,Series3)
作为x轴的四分之一,Series1&amp; Series2为左y轴,Series3为右y轴和图例。
我已经看到使用scale_y_continues的ggplot的一些解决方案,但是辅助(y)轴必须是主轴的倍数。这是我不想要的,因为数据将是动态的,并且在所有情况下比率可能都不会持续。
任何解决方案我如何创建这个?也许ggplot不是要走的路?
答案 0 :(得分:1)
我不了解ggplot2,但您可以在R中使用par(new = T)
在另一个图表之上绘制图表。
如果从第一个图中删除右轴并在第二个图上手动添加它,它应该看起来很好。
Quarters <- c(1,2,3)
Series1 <- c(0.01,0.02,0.03)
Series2 <- c(0.04,0.05,0.06)
Series3 <- c(1000,2000,3000)
par(mar = c(5,5,2,5)) # Leaves some space for the second axis
plot(Quarters,Series1,type="l",ylim=c(0,0.1))
lines(Quarters,Series2,col="red")
par(new=T)
plot(Quarters,Series3,type="l",axes=F, xlab=NA, ylab=NA,col="blue") # Removes axis and labels so they don't overlap
axis(side = 4) # Adds secondary axis
这对你有用吗?更多信息here
答案 1 :(得分:1)
ggplot2
完全没问题,非常适合双轴。您可以在sec.axis
或scale_y_continuous
(或几乎任何有效的scale_y_discrete
)电话中使用scale_y_
:
scale_y_continuous(
"Casualties* due to:",
sec.axis = sec_axis(~. *0.001,
name="Aircraft passengers carried, bn",
labels = scaleFUN,
breaks = seq(0,3, by=0.5)),
limits = c(0,3000),
breaks = seq(0,3000, by=500),
labels = comma
)
以下创建两个轴,一个断点为0到3000,乘以500.这是左侧的轴(主轴)。第二个是0到3乘0.5,但没有理由它应该遵循这个规模。你可以很好地得到不是主轴倍数的尺度。
您可以获得如下情节:
使用上述技术。如果有用,我会提供完整的ggplot
代码来重新创建上面的地图in this post。完全在ggplot2
完成,包括水平图例和辅助轴。