R绘制具有辅轴的数据系列

时间:2018-05-24 14:16:28

标签: r ggplot2

我想绘制一个包含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不是要走的路?

2 个答案:

答案 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.axisscale_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完成,包括水平图例和辅助轴。

祝你好运!