Я написал следующий код для построения моих xy-данных по набору повторно масштабируемых осей, значения, содержащиеся в pointSize, - это правильно масштабированные вертикальные/горизонтальные диаметры точки, которую я хочу на каждой построенной координате. Как я могу заставить это работать? Прямо сейчас я просто рисую точки с любым масштабированием, используемым по умолчанию в geom_point (aes (size)), и точки не масштабируются с осями. Как только я перемасштабирую оси с координатором, я хочу, чтобы нанесенные точки увеличивались/уменьшались относительно осей соответственно.R: масштаб geom_point с осями (ggplot2)
Например, если размер точки равен 5, это означает, что горизонтальный и вертикальный диаметр точки равен 5 относительно осей, независимо от указанного xyScaling.
EDIT: мин в pointSize должно быть мин = 0, а не мин = -10
Минимальная воспроизводимая код:
# Sample size & x-y axes plot boundaries
sampleSize <- 100
# Set scale factor of x-y axes
xyScaling <- 1
# Set to false once sampled to rescale axis with same distributions
resample <- TRUE
if (resample == TRUE){
xSample <- replicate(sampleSize, runif(1, min = -sampleSize/2, max = sampleSize/2))
ySample <- replicate(sampleSize, runif(1, min = -sampleSize/2, max = sampleSize/2))
pointSize <- replicate(sampleSize, runif(1, min = 0, max = 10))
}
sampleDataFrame <- data.frame(xSample, ySample, pointSize)
samplePlot <- ggplot(sampleDataFrame, aes(xSample, ySample))
samplePlot +
geom_point(data = sampleDataFrame, aes(size = sampleDataFrame$pointSize[])) +
coord_cartesian(xlim = c((xyScaling*(-sampleSize/2)),(xyScaling*(sampleSize/2))),
ylim = c((xyScaling*(-sampleSize/2)),(xyScaling*(sampleSize/2)))) +
xlab("x") +
ylab("y") +
scale_size_identity(guide=FALSE)
EDIT: Так что я почти удалось решить проблему с помощью geom_rect, следующий код делает то, что я хочу, с оговоркой, что точки являются прямоугольниками, а не эллипсами/кругами, я не мог заставить это работать с эллипсами, если бы кто-нибудь мог направить меня к правильной функции, я был бы очень благодарен.
sampleDataFrame <- data.frame(xSample, ySample, pointSize)
samplePlot <- ggplot(sampleDataFrame)
samplePlot +
geom_point(aes(xSample, ySample, size = 0)) +
geom_rect(aes(xmin = xSample-(pointSize/2), xmax = xSample+(pointSize/2), ymin = ySample-(pointSize/2), ymax = ySample+(pointSize/2))) +
coord_cartesian(xlim = c((xyScaling*(-sampleSize/2)),(xyScaling*(sampleSize/2))),
ylim = c((xyScaling*(-sampleSize/2)),(xyScaling*(sampleSize/2)))) +
xlab("x") +
ylab("y") +
scale_size_identity(guide=FALSE)
Предоставление ответа было бы намного проще и веселее с [ минимальный воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – RHertel
Мой плохой, это мой первый раз при переполнении стека, вернется с «минимальным воспроизводимым примером» как можно скорее. – PhysWhiz
Как подсказка с тем же образцом, что и при повторном запуске скрипта, если вы используете команду 'set.seed (1000)', где '1000' может быть любым числом, будут выбраны одинаковые случайные числа. Это похоже на то, что у «R» есть список «случайных» чисел, и функция 'set.seed' сообщает ему, в какой момент начать чтение списка. –