2017-07-27 83 views
6

我想將ggplot2圖上的左側Y軸複製到右側,然後更改離散(分類)軸的刻度標籤。在ggplot2中複製(和修改)離散軸

我讀過的答案this question,但是可以看出on the package's repo page,該switch_axis_position()功能已經從cowplot包裝中取出(作者引用GGPLOT2(即將出版?)本機功能)。

我已經在ggplot2的次軸上看到了reference頁面,但是該文檔中的所有示例都使用scale_y_continuous而不是scale_y_discrete。而且,事實上,當我嘗試使用離散函數,我得到的錯誤:

Error in discrete_scale(c("y", "ymin", "ymax", "yend"), "position_d", : 
unused argument (sec.axis = <environment>) 

反正是有與GGPLOT2做到這一點?即使是完全黑客的解決方案也足以滿足我的需求。提前致謝。 (下面的MRE)

library(ggplot2) 

# Working continuous plot with 2 axes 
ggplot(mtcars, aes(cyl, mpg)) + 
    geom_point() + 
    scale_y_continuous(sec.axis = sec_axis(~.+10)) 


# Working discrete plot with 1 axis 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() 


# Broken discrete plot with 2 axes 
ggplot(mtcars, aes(cyl, as.factor(mpg))) + 
    geom_point() + 
    scale_y_discrete(sec.axis = sec_axis(~.+10)) 
+0

看的'源scale_y_discrete'有用於指定所述副軸沒有選項/參數。所以任何解決方案可能都必須是黑客。 – SymbolixAU

回答

6

拿出離散因子並用數字表示。然後,您可以對其進行鏡像並重新標記刻度以作爲因子級別而不是數字。

library(ggplot2) 

irislabs1 <- levels(iris$Species) 
irislabs2 <- c("foo", "bar", "buzz") 

ggplot(iris, aes(Sepal.Length, as.numeric(Species))) + 
    geom_point() + 
    scale_y_continuous(breaks = 1:length(irislabs1), 
        labels = irislabs1, 
        sec.axis = sec_axis(~., 
             breaks = 1:length(irislabs2), 
             labels = irislabs2)) 

需要更密切地模仿默認離散規模與規模的expand =參數然後擺弄。

enter image description here

+1

根據ggplot help「連續變量的默認值爲c(0.05,0),離散變量的默認值爲c(0,0.6)。」對我來說 expand = c(0,0.6)給出了非常好的結果 – TobiO