Ggplot関数を作成する際に障害になりました。 ggplot facet_wrapプロットのファセットラベルを変更しようとしていますが、実際よりもトリッキーです。
使用しているデータはこちらからアクセスできます
str(ggdata)
'data.frame': 72 obs. of 8 variables:
$ Season : Factor w/ 3 levels "Autumn","Spring",..: 2 2 2 2 2 2 2 2 2 2 ...
$ Site : Factor w/ 27 levels "Afon Cadnant",..: 13 13 13 13 13 13 13 13 13 13 ...
$ Isotope: Factor w/ 4 levels "14CAA","14CGlu",..: 1 1 1 1 1 1 2 2 2 2 ...
$ Time : int 0 2 5 24 48 72 0 2 5 24 ...
$ n : int 3 3 3 3 3 3 3 3 3 3 ...
$ mean : num 100 88.4 80.7 40.5 27.6 ...
$ sd : num 0 1.74 2.85 2.58 2.55 ...
$ se : num 0 1 1.65 1.49 1.47 ...
アイソトープ因子レベルを使用してファセットにラベルを付けるggplotを作成する次の関数を作成しました。
plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) +
geom_line(aes(Time, mean, colour = Season, linetype = Season)) +
geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) +
labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") +
scale_x_continuous(breaks=c(0, 24, 48, 72)) +
scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) +
theme(axis.title.y = element_text(vjust = 5)) +
theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) +
theme_bw() + facet_wrap(~Isotope, ncol =2)
print(site_plots)
ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"),
path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/",
width = 9, height = 7, dpi = 300)}
この素敵なグラフの結果:
これはいいことですが、ファセットラベルを変更したいのですが...グーグルを少し調べたら、labeller
関数をfacet_wrap
に渡す引数として使用できると思いました。イライラする1時間後、これはfacet_grid
!!! ???したがって、別の方法は、Factorレベルの名前を変更して、必要なファセットラベルを取得することでした。
gdata$Isotope <- revalue(x = ggdata$Isotope,
c("14CAA" = " 14C Amino Acids", "14CGlu" = "14C Glucose",
"14cGlu6P" = "14C Glucose-6-phosphate", "33P" = "33P Phosphate"))
これは機能しますが、私が今持っている問題は、ラベルの数字を上付きにしたいということです。誰かがこれを達成するための最良の方法を提案できますか?ありがとう
整理して管理しましょう! ggplot
の開発バージョンのインストールに問題がありましたが、curl
とdevtools
をインストールして再インストールした後、scales
itが機能しました。私は@ eipi10の答えを試しましたが、うまくいきませんでしたので、因子ラベル名を別の方法で変更しました:
ggdata$Isotope <- factor(ggdata$Isotope, labels = c("NULL^14*C~Amino~Acids",
"NULL^14*C~Glucose", "NULL^14*C~Glucose-6-phosphate", "NULL^33*P~Phosphate"))
次に、labeller = label_parsed
をfacet_wrap
関数に渡すようにggplot関数を調整しました。
plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) +
geom_line(aes(Time, mean, colour = Season, linetype = Season)) +
geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) +
labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") +
scale_x_continuous(breaks=c(0, 24, 48, 72)) +
scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) +
theme(axis.title.y = element_text(vjust = 5)) +
theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) +
theme_bw() + facet_wrap(~Isotope, ncol =2, labeller = label_parsed)
print(site_plots)
ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"),
path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/",
width = 9, height = 7, dpi = 300)}
ggdata
をplot_func
に渡すと、以下のグラフに正しいファセットラベルが表示されます。
ファセットラベルを適切な式に設定し、labeller
関数label_parsed
を使用して、適切に表示されるようにします。次に、組み込みのiris
データフレームを使用した例を示します。
data(iris)
iris$Species = as.character(iris$Species)
iris$Species[iris$Species == "virginica"] = "NULL^14*C~Amino~Acids"
ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
geom_point() +
facet_wrap(~ Species, labeller=label_parsed)
^14*C
の前にNULL
を追加する必要があります。そうしないと、最初の文字が^
になるためエラーが発生します。 *
および~
は、各部分の間にスペースを入れないかどうかに応じて、式の各部分の境界をマークします。
これを書いている時点(2015年12月12日)では、これをggplot2
で使用するには、facet_wrap
の開発バージョンを使用する必要があります。ただし、この機能はおそらく間もなく、パッケージの通常のリリースに組み込まれる予定です。