【问题标题】:Two datasets on a log scale y-axis and another on secondary axis with title对数刻度 y 轴上的两个数据集和带有标题的辅助轴上的另一个数据集
【发布时间】:2019-06-04 05:13:34
【问题描述】:

我想在 log10scale 的左侧 Y 轴上绘制 A 列和 B 列,在正常比例的右侧轴上绘制 C 列。 X 轴将是我数据的第一列,Time

我的数据是:

# A tibble: 7 x 4
     Time       A     B     C
    <dbl>   <dbl> <dbl> <dbl>
        1   33046   196  0.81
        2  970250   578  0.94
        3 1870125   323  2.31
        4  259625   509 12.20
        5 3838750   215 11.50
        6  962333  5437  4.70
        7 2272917 41028 10.10

我试过了:

plot(data$Time, data$A, type = "l",  xlim = NULL, ylim = NULL,
     log = "y", main = "Title", xlab = "Time", ylab = "copies", col= "blue")
par(new = TRUE)
plot(data$Time, data$B, type = "l",  xlim = NULL, ylim = NULL,
     log = "y", main = "", xlab = "", ylab = "", col= "green", add=TRUE)
par(new = TRUE)
plot(data$C, type = "l", xaxt = "n", yaxt = "n",
     ylab = "", xlab = "", col = "red", lty = 2, )
axis(side = 4)
mtext("secondary axis", side = 4, line = 3)
legend("topleft", c("A", "B", "C"),
       col = c("blue", "green", "red"), lty = c(1, 2)) 
  • 如何在 y1 上以对数刻度 (10^2-10^6) 绘制 A 和 B 而不会重叠?

  • 如何添加y2轴标题?

这是我使用上面的代码得到的图表:

【问题讨论】:

    标签: r plot


    【解决方案1】:

    您需要为两个图指定相同的限制以具有相同的轴。这就是为什么我在两个图中都有ylim = c(100,10000000)

    您需要定义适当的边距和绘图边界才能显示所有内容。这就是par(mar = c(5,4,4,4) + 0.1) 所做的。

    legend 中,您需要为所有走线指定线型;所以,lty = c(1, 2) 是不正确的,因为 B 跟踪在图例中是虚线,而 C 是虚线。我为此使用了lty = c(1, 1, 2)

    另外,我在mtext 中使用了col="red" 来明确辅助轴是用于C,它也在red 中。

    data <- structure(list(Time = 1:7, 
                              A = c(33046, 970250, 1870125, 259625, 3838750, 962333, 2272917), 
                              B = c(196, 578, 323, 509, 215, 5437, 41028), 
                              C = c(0.81, 0.94, 2.31, 12.2, 11.5, 4.7, 10.1)), 
                      row.names = c(NA, -7L), 
                      class = c("tbl_df", "tbl", "data.frame"))
    
    opar <- par(mar = c(5,4,4,4) + 0.1)
    
    plot(data$Time, data$A, type = "l",  xlim = NULL, ylim = c(100,10000000),
         log = "y", main = "Title", xlab = "Time", ylab = "copies", col= "blue")
    
    par(new = TRUE)
    plot(data$Time, data$B, type = "l",  xlim = NULL, ylim = c(100,10000000),
         log = "y", main = "", xlab = "", ylab = "", col= "green")
    
    par(new = TRUE)
    plot(data$C, type = "l", xaxt = "n", yaxt = "n",
         ylab = "", xlab = "", col = "red", lty = 2, )
    axis(side = 4)
    
    mtext("secondary axis", side = 4, line = 3, col="red")
    legend("topleft", c("A", "B", "C"),
           col = c("blue", "green", "red"), lty = c(1, 1, 2)) 
    par(opar)
    

    reprex package (v0.3.0) 于 2019 年 6 月 3 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多