ヒートマップに合計と行の合計を追加し、ここのような他の投稿で実現するためにすでに提案されている方法に苦労したいと思います:ggplot2:要約行と列の独立した連続塗りつぶし。
上記の投稿の問題は、合計(行、列)が作成されるコードがわからないことです。「#要約行と列を作成する」とマークされていますが、取得できません。
だから、もし... 1. ...誰かが私を助けて、私の投稿されたコード(以下)を参照してそこに到達するための(簡単な)方法を教えてくれたら、そして2 ....行と列の合計は、個別のカラースケールを持つことができます。
私はこれを試しました...
# create sample
scen <- 1:32
ls <- rep(1:7, length(scen))
df <- data.frame(Landscape = ls, Scenario = scen)
df$SoP <- sample(seq(-0.070, 0.070, by = 0.01),replace=T, nrow(df))
df$Landscape_Name <- LETTERS[1:7]
# create heatmap
library(ggplot2)
df.diff <- ggplot(df, aes(x = Landscape_Name, y = Scenario)) +
geom_tile(aes(fill = SoP)) +
geom_text(size = 3, aes(label = round(SoP,2))) + #displays cell values
scale_fill_gradient2(low = "gold", #colors
mid = "white",
high = "grey",
midpoint = 0) +
theme(panel.grid.major.x=element_blank(), #no gridlines
panel.grid.minor.x=element_blank(),
panel.grid.major.y=element_blank(),
panel.grid.minor.y=element_blank(),
panel.background=element_rect(fill="white"),
axis.text.x = element_text(angle=0, hjust = 0.5,vjust=0.5, size = 8,face = NULL),
axis.text.y = element_text(size = 8,face = NULL),
plot.title = element_text(size=10,face="bold")) +
ggtitle("Treatment efficiency") +
theme(legend.title=element_text(face="bold", size=8)) +
scale_x_discrete(name="Landscape", position = "top") +
scale_y_discrete(name="Scenario") +
labs(fill="SoP")
print(df.diff)
あなたの助けをどうもありがとう!
あなたが参照した投稿、すなわちggplot2:要約行と列の独立した連続塗りつぶしで答えを説明できるかどうか見てみましょう
最初のいくつかのメモ:
y
軸あなたは軸のラベルが消えて、なぜあなたが実行したときの継続的な尺度と考えられている数字のベクトルを、プロットしているscale_y_discrete
プロットが軸に新たな価値を加えることで、私たちが決めると、正常に動作している間、(つまり、 、Total
)これは問題を引き起こすScenario
ので、文字ベクトルである必要があると思います。Scenario
を使用して列を文字列as.character
に変換すると、値の並べ替えが台無しになります。たとえば、実行してみてくださいsort(as.character(1:20))
。これは、2桁の数値(01、02、03、.....)を使用することで回避できます。これは、私がそこで行ったことです。だからここに行きます:
library(ggplot2)
library(dplyr)
# pad numbers with zeros to get 2 digit numbers, this will be a string
scen <- sprintf('%02d', 1:32)
ls <- rep(1:7, length(scen))
df <- data.frame(Landscape = ls, Scenario = scen)
df$SoP <- sample(seq(-0.070, 0.070, by = 0.01),replace=T, nrow(df))
df$Landscape_Name <- LETTERS[1:7]
# create the main plot, and take a look at it
df.diff <- ggplot(df, aes(x = Landscape_Name, y = Scenario)) +
geom_tile(aes(fill = SoP)) +
geom_text(size = 3, aes(label = round(SoP,2))) + #displays cell values
scale_fill_gradient2(low = "gold", #colors
mid = "white",
high = "grey",
midpoint = 0)
df.diff
今、私たちは、私たちは余分にカテゴリを追加することができ、データたいLandscape_Name
との余分なカテゴリをScenario
:ように、
Landscape_Name
(水平方向の合計)に追加されるカテゴリは、SoP
それぞれのすべての合計でScenario
あり、Scenario
(垂直方向の合計)に追加されるカテゴリは、SoP
それぞれのすべての合計です。Landscape_Name
基本的に必要なものgroup_by
とsum
h_total <- df %>%
group_by(Scenario) %>%
summarise(SoP = sum(SoP)) %>%
mutate(Landscape_Name = 'Total')
v_total <- df %>%
group_by(Landscape_Name) %>%
summarise(SoP = sum(SoP)) %>%
mutate(Scenario = 'Total')
これで、グループ化されたデータを元のプロットに追加できます。geom_point
新しいデータで同じ列名を使用したためx
、y
美学は元のプロットから継承され、使用する元のプロットとは異なる配色になります。color
(ではなくfill
)、選択した形状で正常に機能します。
合計のセル値も必要な場合は、それらのセル値も追加する必要があります
p <- df.diff +
geom_point(data = h_total,
aes(color = SoP),
size = 10,
shape = 19) +
geom_point(data = v_total,
aes(color = SoP),
size = 10,
shape = 19) +
scale_color_gradient2(low = "red", #colors
mid = "white",
high = "grey",
midpoint = 0) +
geom_text(data = h_total, size = 3, aes(label = round(SoP,2))) +
geom_text(data = v_total, size = 3, aes(label = round(SoP,2)))
p
最後に、テーマのカスタマイズ、タイトル、軸と凡例のラベルを追加します
p +
theme(panel.grid.major.x=element_blank(), #no gridlines
panel.grid.minor.x=element_blank(),
panel.grid.major.y=element_blank(),
panel.grid.minor.y=element_blank(),
panel.background=element_rect(fill="white"),
axis.text.x = element_text(angle=0, hjust = 0.5,vjust=0.5, size = 8,face = NULL),
axis.text.y = element_text(size = 8,face = NULL),
plot.title = element_text(size=10,face="bold"),
legend.title=element_text(face="bold", size=8)) +
scale_x_discrete(name="Landscape", position = "top") +
scale_y_discrete(name="Scenario",
# if you want the total to be at the bottom instead of at the top,
# you can set the limits of y with the reversed order of the categories
limits = rev(c(unique(as.character(df$Scenario)), 'Total'))) +
# you can here change the y/x ratio
coord_fixed(ratio = 0.4) +
labs(fill="SoP", color ="SoP Total") +
ggtitle("Treatment efficiency")
私はついにプロットを保存しました ggsave(' PATH/TO/plot.jpeg', width =20, height = 40, units = 'cm')
これが出力でした
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加