Какой самый простой способ заполнить область под строкой geom_freqpoly? - PullRequest
8 голосов
/ 02 мая 2010

Ось X - это время, разбитое на временные интервалы. Во фрейме данных есть столбец интервал , который указывает время для каждой строки. Столбец представляет собой фактор, где каждый интервал представляет собой отдельный уровень фактора.

Построение гистограммы или линии с использованием geom_histogram и geom_freqpoly прекрасно работает, но я бы хотел, чтобы линия, подобная предоставляемой geom_freqpoly, была заполнена.

В настоящее время я использую geom_freqpoly следующим образом:

ggplot(quake.data, aes(interval, fill=tweet.type)) + geom_freqpoly(aes(group = tweet.type, colour = tweet.type)) + opts(axis.text.x=theme_text(angle=-60, hjust=0, size = 6))

plots

Я бы предпочел иметь заполненную область, например, предоставленную geom_density, но без сглаживания линии:

smoooth

Было предложено geom_area, есть ли способ использовать сгенерированную ggplot2 статистику, такую ​​как ..count .., для значений y geom_area? Или агрегация количества должна произойти до использования ggplot2?


Как указано в ответе, geom_area (..., stat = "bin") является решением:

ggplot(quake.data, aes(interval)) + geom_area(aes(y = ..count.., fill = tweet.type, group = tweet.type), stat = "bin") + opts(axis.text.x=theme_text(angle=-60, hjust=0, size = 6))

производит:

desired

Ответы [ 4 ]

14 голосов
/ 03 мая 2010

Возможно, вы хотите:

geom_area(aes(y = ..count..), stat = "bin")
3 голосов
/ 14 января 2012

geom_ribbon может использоваться для создания заполненной области между двумя линиями без необходимости явного построения многоугольника. Здесь есть хорошая документация .

1 голос
/ 03 мая 2010

ggplot(quake.data, aes(interval, fill=tweet.type, group = 1)) + geom_density()

Но я не думаю, что это значимый рисунок.

1 голос
/ 03 мая 2010

Я не совсем уверен, к чему вы стремитесь. Вы хотите линию или бары. Вы должны проверить geom_bar на заполненные бары. Что-то вроде:

p <- ggplot(data, aes(x = time, y = count))
p + geom_bar(stat = "identity")

Если вы хотите, чтобы линия была заполнена снизу, вам следует взглянуть на geom_area , который я лично не использовал, но кажется, что конструкция будет почти такой же.

p <- ggplot(data, aes(x = time, y = count))
p + geom_area()

Надеюсь, это поможет. Дайте больше информации, и мы, возможно, можем быть более полезными.

На самом деле я бы добавил индекс, просто строку данных и использовал бы его как x, а затем использовал бы

p <- ggplot(data, aes(x = index, y = count))
p + geom_bar(stat = "identity") + scale_x_continuous("Intervals", 
breaks = index, labels = intervals)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...