Ggplot2プロットの左側のY軸を右側に複製し、離散(カテゴリ)軸の目盛りラベルを変更します。
私は この質問 への回答を読みましたが、 パッケージのリポジトリページ からわかるように、switch_axis_position()
関数はcowplot
から削除されましたパッケージ(ggplot2のネイティブ機能を引用した作者(近いですか?))。
Ggplot2の第2軸の 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))
離散係数を取り、それを数値で表現します。次に、それをミラーリングして、目盛りを数値ではなく因子レベルに再ラベル付けできます。
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 =
引数を必要に応じてスケールで使用し、デフォルトの離散スケールをより厳密に模倣します。