R 重塑数据以引入次轴(ggplot2)

R 重塑数据以引入次轴(ggplot2),r,ggplot2,R,Ggplot2,我正试图重塑我的数据,但我不知道怎么做。让我们使用简单的数据: a <- c(1,2,3,4,5,6) b <- c(21.810, 22.086, 21.972, 22.214, 21.871, 22.352) c <- c(411.6443, 412.8378, 411.9041, 413.6155, 402.0946, 411.6599) df <- data.frame(a,b,c) 编辑。这是我想要的图形类型的一个示例 我该怎么做呢?由于tjebo的担忧,更

我正试图重塑我的数据,但我不知道怎么做。让我们使用简单的数据:

a <- c(1,2,3,4,5,6)
b <- c(21.810, 22.086, 21.972, 22.214, 21.871, 22.352)
c <- c(411.6443, 412.8378, 411.9041, 413.6155, 402.0946, 411.6599)
df <- data.frame(a,b,c)
编辑。这是我想要的图形类型的一个示例


我该怎么做呢?

由于tjebo的担忧,更新II请参见评论: 更恰当的方式:

  • 在df中进行转换
  • 长格式
  • geom_line()
  • 第一个答案: 请考虑TEJBO的评论。但这里有一个解决方案,您可以这样做:

    ggplot(df, aes(x = a))+ 
      geom_line(aes(y = b)) +
      geom_point(aes(y =b)) +
      geom_line(aes(y = c/10)) +
      geom_point(aes(y =c/10))+ 
      scale_y_continuous(sec.axis = sec_axis(~.*10, name = "second y"))
    

    数据:


    a 1)不要在aes中使用$2)不要使用第二个y轴-本博客还建议了一些选项,包括连接散点图,这是显示刚编辑的文章的一种很好的方式。你知道美学是否可以像我添加的图像一样?我的老师让我做这种类型的情节,我需要做一个研究(虽然不推荐)。谢谢你确定
    geom_点(y=…)
    正在工作吗?我还没有试过,但我觉得有一个调用
    aes
    missinge,即使它有效(我现在已经测试过了,而且确实有效,这让我非常惊讶)——我几乎不建议不要在aes调用中加入y。我建议您明确地设置美学,以免混淆自己和/或他人,并可能产生特殊和意外的副作用。好的,b的计算奇迹般地发生在传递给ggplot()的数据帧环境中。但它是给定顺序中的向量,不能作为一种美学。我很放心——也很明显,在你的例子中,这只是偶然发生的。考虑<代码>是的,这更好,因为你把Y传递到了全球美学中。问题在于第二种选择。让我来编辑,你就会明白我的意思了
    df1 <- df %>% 
      mutate(c_transformed = c/(410.626/22)) %>% 
      pivot_longer(
        cols = c(b, c_transformed),
        names_to = 'names',
        values_to = 'value'
      ) %>% 
      arrange(names) 
    
    p <- ggplot(df1, aes(x = a, y = value, color = names)) + 
      geom_line() +   
      scale_color_manual(values = c("blue", "red")) + 
      scale_y_continuous(sec.axis = sec_axis(~.*(410.626/22), name = "second y")) +
      theme_classic()
    p
    
    ggplot(df, aes(x = a))+ 
      geom_line(aes(y = b, color = "b")) +
      geom_line(aes(y = c/(410.626/22), color = "c")) +
      scale_y_continuous(sec.axis = sec_axis(~.*(410.626/22), name = "second y")) +
      theme_classic()
    
    ggplot(df, aes(x = a))+ 
      geom_line(aes(y = b)) +
      geom_point(aes(y =b)) +
      geom_line(aes(y = c/10)) +
      geom_point(aes(y =c/10))+ 
      scale_y_continuous(sec.axis = sec_axis(~.*10, name = "second y"))
    
    a <- c(1,2,3,4,5,6)
    b <- c(21.810, 22.086, 21.972, 22.214, 21.871, 22.352)
    c <- c(411.6443, 412.8378, 411.9041, 413.6155, 402.0946, 411.6599)
    
    df <- data.frame(a,b,c)