簡體   English   中英

如何在 ggplot2 R 中為另一個刻度的變量添加輔助 y 軸?

[英]How to add a secondary y-axis for a variable in another scale in ggplot2 R?

我需要 plot,在同一個圖中,兩個具有相同 x 尺度(但不是完全相同的值)但不同 y 尺度的變量。

這是一個模擬數據集。

data.to.plot <-read.csv(text = "
day,y_var,variable
27,0.507443942,A
41,2.527504878,A
54,6.751827205,A
68,7.043454632,A
85,5.768129102,A
86,5.402048401,A
97,5.898675564,A
99,5.748121277,A
114,4.720510161,A
127,0.262912624,A
27,0.016378515,B
36,0.186698659,B
41,0.408702584,B
49,0.612277527,B
54,0.621408327,B
56,0.666804636,B
69,0.820265225,B
77,0.773412558,B
84,0.859296621,B
91,0.735260116,B
98,0.722547242,B
105,0.902835074,B
114,0.637068452,B
127,0.187549491,B
")

這是我能夠制作的 plot 的代碼。

ggplot(data.to.plot, aes(x=day, y=y_var, col=variable)) +
        geom_point(aes(x=day, y=y_var, col=variable)) +
        geom_smooth(aes(x=day, y=y_var, col=variable),
                    method = loess, se = FALSE)

在此處輸入圖像描述

What I would need is to add a secondary y-axis for variable B to expand the scale to better visualize the data. 
The secondary y-axis should go from 0 to 1.
I played around with "sec.axis" function but I was not able to find a solution. 
Any hint would be really appreciated. 

因此,您需要將變量一分為二,您可以通過創建兩個不同的數據幀或使用 dplyr 中的傳播 function 來實現。為簡單起見,我做了第一個。 這是因為您需要在第二個軸上重新縮放所需的數據集,然后將軸向下縮放,請注意 *7.5 和 ~./7.5。

 library(tidyverse)
 data.to.plot.A <- data.to.plot %>% 
                    filter(variable == "A")

 data.to.plot.B <- data.to.plot %>% 
                filter(variable == "B")

  ggplot() +
      geom_point(data.to.plot.A, mapping = aes(x=day, y=y_var), color = "red") +
      geom_smooth(data.to.plot.A, mapping = aes(x=day, y=y_var), color = "red",
                  method = loess, se = FALSE) +
      geom_point(data.to.plot.B, mapping = aes(x=day, y=y_var*7.5), color = "blue") +
      geom_smooth(data.to.plot.B, mapping = aes(x=day, y=y_var*7.5), color = "blue",
                  method = loess, se = FALSE) +
      scale_y_continuous(sec.axis = sec_axis(~./7.5, name = "y_var_b"))

這是傳播解決方案,我總是忘記他們正在逐步淘汰傳播以支持 pivot_wider。 一樣的想法。 您在這里所做的是獲取變量列並將每個變量轉換為它自己的列。 這樣你就不需要為每個對象制作對象。 這將創建 NA,因為您沒有所有日期的兩個變量的數據。 請注意對新列名稱的 y aes 更改

library(tidyverse)
data.to.plot.pivot <- data.to.plot %>% 
    pivot_wider( names_from = variable, values_from = y_var)

     ggplot(data.to.plot.pivot) +
            geom_point(mapping = aes(x=day, y=A), color = "red") +
            geom_smooth(mapping = aes(x=day, y=A), color = "red",
                        method = loess, se = FALSE) +
            geom_point(mapping = aes(x=day, y=B*7.5), color = "blue") +
            geom_smooth(mapping = aes(x=day, y=B*7.5), 
                       color = "blue",
                        method = loess, se = FALSE) +
           scale_y_continuous(sec.axis = sec_axis(~./7.5, name = "y_var_b"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM