2016-05-12 3 views
1

Я пытаюсь создать граф с разбивкой по областям с r и ggplot2. Мне бы хотелось посмотреть like this, но вместо этого areas overlap and have holes. Я пытаюсь обеспечить, чтобы области были сложены так, чтобы область с наибольшим значением за последний месяц (2016-05 в этом случае) была внизу.График уложенной области с использованием R и ggplot2 имеет дыры

Относительные сообщения like this one, похоже, имеют отверстия в данных, что, похоже, не является проблемой здесь.

Вот пример кода, чтобы воссоздать этот вопрос:

sample.data <- structure(
    list(
    rank = structure(
     c(34L, 34L, 34L, 35L, 35L, 35L, 34L, 34L, 34L, 34L, 35L, 35L, 35L, 35L, 35L, 34L), 
     .Label = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35"), 
     class = "factor"), 
    vendor = structure(
     c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L), 
     .Label = c("34", "35"), 
     class = "factor"), 
    year.month = c("2015-12", "2016-01", "2015-11", "2015-12", "2016-01", "2015-10", "2016-03", "2016-02", "2015-10", "2016-04", "2015-11", "2016-05", "2016-04", "2016-03", "2016-02", "2016-05"), 
    value = c(431616L, 272224L, 229288L, 195284L, 155168L, 154194L, 149784L, 137302L, 126612L, 117408L, 94141L, 56161L, 54606L, 53173L, 49898L, 45348L)), 
    .Names = c("rank", "vendor", "year.month", "value"), 
    row.names = c(6L, 8L, 4L, 5L, 7L, 1L, 12L, 10L, 2L, 14L, 3L, 15L, 13L, 11L, 9L, 16L), 
    class = "data.frame" 
) 

ggplot(data = sample.data, aes(x = year.month, y = value, group = vendor, color = vendor, reorder(-value), fill=vendor)) + 
    geom_area() 

Спасибо заранее за вашу помощь.

ответ

0

Try: + geom_area (позиция = "увернуться", стат = "идентичность")

0

следующие работы:

ggplot(data = sample.data[order(sample.data$vendor),], 
     aes(x = year.month, y = value, group = vendor, color = vendor, 
      reorder(-value), fill=vendor)) + geom_area() 

Вы просто должны были заказать данные: sample.data[order(sample.data$vendor),].

Если вы хотите изменить порядок графа, вы должны «relevel» переменную поставщика, который хранится в качестве фактора:

sample.data$vendor <- relevel(sample.data$vendor, ref="35") 

Вот код, чтобы выяснить, что продавец, чтобы установить в качестве базовый уровень в соответствии с вашим критерием:

with(sample.data, sample.data[year.month=="2016-05", 
         "vendor"][which.max(sample.data[year.month=="2016-05", "value"])]) 
+0

Спасибо за быстрый ответ! Я думаю, что это действительно близко, но я стараюсь, чтобы области были сложены, так что область с наибольшим значением в последнем месяце (2016-05 в этом случае) находится внизу. Я попытался заменить значение «value» на «vendor» в пару мест, но это не работает. – Matt

+0

Поскольку переменная вашего поставщика является фактором, вам нужно использовать 'release 'для достижения этого. См. Мой код выше. – lmo

Смежные вопросы