2017-07-27 8 views
6

ggplot2プロットの左側のY軸を右側に複製し、離散(カテゴリ)軸の目盛りラベルを変更したいとします。私はthis questionへの答えを読んだggplot2の離散軸の複製(および変更)

、しかしon the package's repo pageを見ることができるように、switch_axis_position()機能がcowplotパッケージ(著者が引用した(今後?)ggplot2でネイティブ機能)から削除されました。

ggplot2のセカンダリ軸でreferenceページが表示されていますが、そのドキュメントのすべての例ではscale_y_discreteではなくscale_y_continuousが使用されています。そして、確かに、私は個別の機能を使用しようとすると、私はエラーを取得:

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

。だから、どんな解決策でもハックする必要があります。 – 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 =引数をいじります。 `二軸を指定するためのオプション/引数はありませんscale_y_discrete`のソースを見て

enter image description here

+1

ggplot help "デフォルトはc(0.05、0)連続変数、c(0、0.6)は離散変数です。"私のために を展開= c(0,0.6)は本当に素晴らしい結果を出しました – TobiO

関連する問題