ビニング変数VAR2_BY_NS_BIN
とx-yデータペア(MP_BIN
、)を持つテーブルがあります。私はbinnedのデータポイントをプロットし、stat_function
を使用して各ビンごとに異なる行を描画し、毎回for loop
を使用して別の参照を取得します。複数のstat_functionをggplot2でオーバーレイできません
test_tab <- data.table(VAR2_BY_NS_BIN=c(0.0005478, 0.0005478, 0.002266, 0.002266, 0.006783, 0.006783, 0.020709, 0.020709, 0.142961, 0.142961),
MP_BIN=rep(c(0.505, 0.995), 5),
CORRECT_PROP=c(0.5082, 0.7496, 0.5024, 0.8627, 0.4878, 0.9368, 0.4979, 0.9826, 0.4811, 0.9989))
VAR2_BIN <- sort(unique(test_tab$VAR2_BY_NS_BIN)) #get unique bin values
LEN_VAR2_BIN <- length(VAR2_BIN) #get number of bins
col_base <- c("#FF0000", "#BB0033", "#880088", "#3300BB", "#0000FF") #mark bins with different colours
p <- ggplot(data = test_tab)
for (i in 1:LEN_VAR2_BIN) {
p <- p + geom_point(data = test_tab[test_tab$VAR2_BY_NS_BIN==VAR2_BIN[i],],
aes(x = MP_BIN, y = CORRECT_PROP),
col = col_base[i],
alpha = 0.5) +
stat_function(fun = function(t) {VAR2_BIN[i]*(t-0.5)+0.5}, col = col_base[i])
}
p <- p + xlab("MP") + ylab("Observed proportion")
print(p)
上記コード(再現可能な例が)、しかし、常に(上記の場合に5行目で)描か最後stat_function
線とプロットを返します。
(for loop
を使用せずに)次のコードで動作しますが、それは非常に現実的ではありませんので、私は実際に...事前に
p <- p + stat_function(fun = function(t) {VAR2_BIN[1]*(t-0.5)+0.5}, col = col_base[1])
p <- p + stat_function(fun = function(t) {VAR2_BIN[2]*(t-0.5)+0.5}, col = col_base[2])
p <- p + stat_function(fun = function(t) {VAR2_BIN[3]*(t-0.5)+0.5}, col = col_base[3])
p <- p + stat_function(fun = function(t) {VAR2_BIN[4]*(t-0.5)+0.5}, col = col_base[4])
p <- p + stat_function(fun = function(t) {VAR2_BIN[5]*(t-0.5)+0.5}, col = col_base[5])
感謝をビンの数が多いです!
ありがとう、このソリューションは私のために働く。自分の配色を定義する方法も尋ねてもいいですか? –
'+ scale_fill_manual(値= c("赤 "、"青 "、"緑 "))'です。 n個の色のベクトル(この場合はn = 3)にするには 'values'だけ必要です。デフォルトは '+ scale_fill_manual(values = hcl(seq(15,375、length.out = 4)[1:3]、100、65))'と同じです。他のオプションについては、[こちらをご覧ください](http://ggplot2.tidyverse.org/reference/scale_brewer.html)をご覧ください。 – eipi10