代码之家  ›  专栏  ›  技术社区  ›  Aksel Etingu

R用次轴绘制数据系列

  •  1
  • Aksel Etingu  · 技术社区  · 7 年前

    我想绘制一个包含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轴,系列1和;序列2为左y轴,序列3为右y轴和图例。

    我已经看到了一些使用scale_y_的ggplot解决方案,但是次(y)轴必须是主轴的倍数。我不希望这样,因为数据将是动态的,而且这个比率可能不会在所有情况下都保持不变。

    有什么解决方案吗?我该怎么做呢?也许这条路不该走?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Zoe - Save the data dump 张群峰    7 年前

    我不知道ggplot2,但你可以用 par(new = T) 在R中,在另一个图形上绘制一个图形。 如果从第一个绘图中删除右轴,并手动将其添加到第二个绘图中,则看起来应该不错。

    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

        2
  •  1
  •   onlyphantom    7 年前

    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 包括水平图例和次轴。

    祝你好运