Я пытаюсь использовать ggplot2 для рисования гистограммы с разными цветовыми барами для разных интервалов х.Передача переменной cut() в ggplot2's aes()
Сославшись на решение Хедли в: how to define fill colours in ggplot histogram?, я прибыл на следующее:
library(ggplot2)
set.seed(1)
a <- seq(from=1, to=10000)
b <- rnorm(10000)
c <- data.frame(a,b) # Convert to DF
ggplot(c, aes(x=b, fill=cut(..x.., breaks=c(-2, -1, -0.5, 0, 0.5, 1, 2)))) +
geom_histogram(binwidth=0.1, color="steelblue")
Однако, когда я пытаюсь определить точки разрыва в переменную, MyBreaks, должны быть переданы в ИСЗ(), Я получаю сообщение об ошибке: «Ошибка в cut.default (x, breaks = MyBreaks): объект« MyBreaks »не найден».
Мой код, который генерируется сообщение об ошибке:
MyBreaks <- c(-2, -1, -0.5, 0, 0.5, 1, 2)
ggplot(c, aes(x=b, fill=cut(..x.., breaks=MyBreaks))) +
geom_histogram(binwidth=0.1, color="steelblue")
Я сделал некоторые исследования подобных ошибок, обнаруженных другими пользователями, но решения не похоже на работу для меня.
Например, решение в How to use earlier declared variables within aes in ggplot with special operators (..count.., etc.) дало: «Ошибка: эстетика должна быть длиной одна или той же длины, что и dataProblems: MyBreaks». Мой код:
ggplot(c, aes(x=b, MyBreaks1=MyBreaks, fill=cut(..x.., breaks=MyBreaks1))) +
geom_histogram(binwidth=0.1, color="steelblue")
Затем я попробовал решение в Local Variables Within aes, но это дало тот же: «Ошибка в cut.default (х, брейки = MyBreaks): объект„MyBreaks“не найден». Мой код:
.e <- environment()
ggplot(c, aes(x=b, fill=cut(..x.., breaks=MyBreaks)), environment = .e) +
geom_histogram(binwidth=0.1, color="steelblue")
Я проделал базовое программирование раньше, но кривая обучения R действительно крутая! Был бы признателен, если кто-то может помочь!
Заранее благодарен!
Спасибо за быстрый ответ, @ Jake! Это работает, но можете ли вы объяснить, почему выбранное решение в этом случае не работает для меня? Если это слишком тяжело, укажите URL-адрес, и я буду читать. – NoviceProg
@NoviceProg Я не могу дать вам больше информации, чем сообщение об ошибке. Аргументы, переданные в 'aes', должны быть длиной 1 или той же длиной, что и данные. В ссылке 'k' всего лишь одно число, поэтому оно имеет длину 1. Вы можете копать исходный код' ggplot2', чтобы выяснить, почему существует ограничение по длине –
Нет проблем, @Jake, вы уже давно помогли ! Я только начинал на R в течение месяца и уже перегружен его сложностью. На этом этапе «почему» является второстепенным по отношению к «как» и «чему». Давайте посмотрим, есть ли другие решения на этом пути. Еще раз спасибо! – NoviceProg