Это связано с другим вопросом: Матрица взвешенной частоты графика .
У меня есть этот рисунок (произведенный кодом ниже в R):
#Set the number of bets and number of trials and % lines
numbet <- 36
numtri <- 1000
#Fill a matrix where the rows are the cumulative bets and the columns are the trials
xcum <- matrix(NA, nrow=numbet, ncol=numtri)
for (i in 1:numtri) {
x <- sample(c(0,1), numbet, prob=c(5/6,1/6), replace = TRUE)
xcum[,i] <- cumsum(x)/(1:numbet)
}
#Plot the trials as transparent lines so you can see the build up
matplot(xcum, type="l", xlab="Number of Trials", ylab="Relative Frequency", main="", col=rgb(0.01, 0.01, 0.01, 0.02), las=1)
Мне очень нравится то, как строится этот график, и он показывает более частые пути темнее, чем более редкие пути (но это недостаточно ясно для презентации в печати). То, что я хотел бы сделать, это создать какую-то шестнадцатеричную или тепловую карту для чисел. Размышляя об этом, кажется, что в сюжет нужно будет включить лотки разных размеров (см. Мою оборотную сторону эскиза конверта):
Тогда мой вопрос: Если я смоделирую миллион прогонов, используя приведенный выше код, как я могу представить его в виде тепловой карты или гексбина с ячейками разного размера, как показано на эскизе?
Чтобы уточнить: я не хочу полагаться на прозрачность, чтобы показать редкость испытания, проходящего через часть сюжета. Вместо этого я хотел бы обозначить редкость теплом и показать общий путь как горячий (красный) и редкий путь как холодный (синий). Кроме того, я не думаю, что корзины должны быть одинакового размера, потому что в первом испытании есть только два места, где может быть путь, но в последнем есть гораздо больше. Отсюда тот факт, что я выбрал изменяющуюся шкалу ящика, основываясь на этом факте. По сути, я подсчитываю, сколько раз путь проходит через ячейку (2 в столбце 1, 3 в столбце 2 и т. Д.), А затем окрашиваю ячейку в зависимости от того, сколько раз он был пройден.
ОБНОВЛЕНИЕ: у меня уже был сюжет, похожий на @Andrie, но я не уверен, что он намного яснее, чем верхний сюжет. Мне не нравится прерывистый характер этого графика (и почему я хочу какую-то тепловую карту). Я думаю, что поскольку в первом столбце есть только два возможных значения, между ними не должно быть огромного визуального разрыва и т. Д. И т. Д. Поэтому я и предусмотрел бункеры разных размеров. Я все еще чувствую, что биннинг-версия лучше показала бы большое количество образцов.
Обновление: Этот веб-сайт описывает процедуру построения тепловой карты:
Чтобы создать версию графика плотности (тепловой карты), мы должны эффективно перечислить появление этих точек в каждом отдельном месте на изображении. Это делается путем настройки сетки и подсчета количества раз, когда координата точки «попадает» в каждый из отдельных «бункеров» пикселей в каждом месте этой сетки.
Возможно, некоторую информацию на этом сайте можно объединить с тем, что у нас уже есть?
Обновление: я взял кое-что из того, что Андри написал с этим вопросом , чтобы прийти к этому, что довольно близко к тому, что я задумывал:
numbet <- 20
numtri <- 100
prob=1/6
#Fill a matrix
xcum <- matrix(NA, nrow=numtri, ncol=numbet+1)
for (i in 1:numtri) {
x <- sample(c(0,1), numbet, prob=c(prob, 1-prob), replace = TRUE)
xcum[i, ] <- c(i, cumsum(x)/cumsum(1:numbet))
}
colnames(xcum) <- c("trial", paste("bet", 1:numbet, sep=""))
mxcum <- reshape(data.frame(xcum), varying=1+1:numbet,
idvar="trial", v.names="outcome", direction="long", timevar="bet")
#from the other question
require(MASS)
dens <- kde2d(mxcum$bet, mxcum$outcome)
filled.contour(dens)
Я не совсем понимаю, что происходит, но это больше похоже на то, что я хотел произвести (очевидно, без лотков разного размера).
Обновление: это похоже на другие графики здесь. Это не совсем верно:
plot(hexbin(x=mxcum$bet, y=mxcum$outcome))
Последняя попытка. Как указано выше:
image(mxcum$bet, mxcum$outcome)
Это очень хорошо. Мне бы хотелось, чтобы это выглядело как мой нарисованный от руки эскиз.