調査データを使って作業しています。調査項目には2つのグループがあり、各グループには3つの項目があります。私の調査サンプルには2人の回答者がいます。ggplot2でRの 'heatmap plotとsave'ループをうまく実装する方法
私は、調査項目のグループによってヒートマップを生成しようとしています:
- 回答者は、彼らが「X」軸上にあるために応答した
- 調査項目軸「Y」にあります。ここで
完全に再現可能な例である:私は私のコードを実行すると
wd <- "D:/Desktop/"
setwd(wd)
#--create dataframe
respondent = c("Respondent_1", "Respondent_1", "Respondent_1","Respondent_1", "Respondent_1", "Respondent_1",
"Respondent_2", "Respondent_2", "Respondent_2","Respondent_2", "Respondent_2", "Respondent_2")
item = c("Item_1", "Item_2", "Item_3","Item_1", "Item_2", "Item_3",
"Item_1", "Item_2", "Item_3","Item_1", "Item_2", "Item_3")
item_group = c("Group_1","Group_1","Group_1","Group_2","Group_2","Group_2",
"Group_1","Group_1","Group_1","Group_2","Group_2","Group_2")
score = c(1, 40, 100, 100, 30, 12,
2, 15, 80, 77, 44, 10)
high_value_color = c("darkred", "darkred", "darkred",
"brown3", "brown3", "brown3")
plot_df = data.frame(respondent, item, item_group, score, high_value_color)
#--write function
#--inspired from this: http://www.reed.edu/data-at-reed/resources/R/loops_with_ggplot2.html
plot_list <- unique(plot_df$item_group)
survey_items.graph <- function(df, na.rm = TRUE, ...) {
#--loop to generate heatmaps for each group
for (i in seq_along(plot_list)) {
plot <- ggplot(aes(x = df$item[df$item_group == plot_list[i]],
y = df$respondent[df$item_group==plot_list[i]]),
data = subset(df, df$item_group == plot_list[i])) +
geom_tile(aes(fill = df$score[df$item_group == plot_list[i]]), colour = "black") +
scale_fill_gradient2(low = "azure1",
high = df$high_value_color[df$item_group == plot_list[i]],
guide = "colorbar") +
geom_text(aes(label = df$score[df$item_group==plot_list[i]],
hjust = 0.5,
angle = 90),
size = 4) +
ggtitle(df$item_group[df$item_group==plot_list[i]]) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
plot.title = element_text(size = 7, face="bold"),
axis.text.y = element_text(size = 7, face ="bold"),
axis.text.x = element_text(angle=90, hjust=1),
axis.title = element_blank(),
legend.position = "none")
# save plots as .png
ggsave(plot, file=paste(wd,"plots/heatmap for ", plot_list[i], ".png", sep=""), scale=2)
print(plot)
}
}
#--load ggplot2
library(ggplot2)
#--execute function on plot dataframe
survey_items.graph(plot_df)
、私は、次の2つのプロットを得た:
を私の直感は、私はことを私に伝えます私のコードの 'scale_fill_gradient2'部分の 'high'引数で何か正しいことをしないでください。
テストでは、 'high'引数を許容可能なカラー文字列値(たとえば 'brown3'、他の色はhere)に置き換えたとき、プロットはI彼らに欲しい。
は、私が欲しいのは、データのhigh_value_color 『変数で見つかった値が』対応する項目を受け入れるための「scale_fill_gradient2」の「高」引数のためです。
まず、 'aes()'呼び出しから 'df $'を削除します。 – Axeman
あなたの直感は正しいです。 'scale_fill_gradient2'の' high'引数に6色を渡しています。 – Axeman
あなたはサブセットdf $ item_group == plot_list [i]] 'を使って自分自身を非常にたくさん繰り返しています。 'for'ループの最初の行を' sub_df = df [df $ item_group == plot_list [i]]] 'にして、それを使うたびにすべてのデータ要素をサブセット化するのではなく' sub_df'を使います。 – Gregor