Вы можете использовать информацию о дате, чтобы ggplot мог выполнить сортировку. Вам нужно только указать R, что столбец code
является упорядоченным коэффициентом.
Мы проверяем правильность сортировки при извлечении уровней:
code_levels <- table_range[order(table_range$min), "code"]
Затем мы используем упорядоченные уровни, когда мы делаем code
с коэффициентом:
table_range$code <- factor(table_range$code, levels=code_levels )
Редактировать:
Добавить пример:
MRE:
table_range <- structure(list(code = structure(c(4L, 3L, 11L, 12L, 13L, 5L, 7L, 6L, 9L, 8L, 10L, 2L, 1L), .Label = c("EI9", "EI7", "EI21", "EI12", "EI30", "EI38", "EI35", "EI44", "EI43", "EI45", "EI25", "EI26", "EI27"), class = "factor"),
sp = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "EI", class = "factor"),
min = structure(c(16587, 16436, 17956, 17956, 18170, 16801, 17410, 17198, 17744, 17622, 17775, 16191, 15675), class = "Date"),
max = structure(c(16648, 17836, 17956, 18293, 18201, 17652, 17501, 18201, 17897, 17622, 18262, 16892, 16495), class = "Date")),
row.names = c(NA, -13L), class = "data.frame")
table_sum <- structure(list(mes_ano = structure(c(15675, 16191, 16436, 16495, 16587, 16648, 16801, 16892, 17045, 17045, 17167, 17198, 17410, 17440, 17471, 17501, 17563, 17622, 17622, 17622, 17652, 17652, 17713, 17744, 17775, 17775, 17805, 17836, 17836, 17897, 17956, 17956, 18017, 18078, 18109, 18170, 18201, 18201, 18201, 18231, 18262, 18293), class = "Date"),
code = structure(c(13L, 12L, 2L, 13L, 1L, 1L, 6L, 12L, 2L, 6L, 6L, 8L, 7L, 2L, 2L, 7L, 2L, 2L, 6L, 10L, 2L, 6L, 2L, 9L, 9L, 11L, 2L, 2L, 9L, 9L, 3L, 4L, 8L, 4L, 4L, 5L, 4L, 5L, 8L, 11L, 11L, 4L), .Label = c("EI12", "EI21", "EI25", "EI26", "EI27", "EI30", "EI35", "EI38", "EI43", "EI44", "EI45", "EI7", "EI9"), class = "factor"),
sp = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "EI", class = "factor"),
count = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L), .Label = c("1", "2", "3"), class = "factor")),
row.names = c(NA, -42L), class = "data.frame")
Изготовление заказанного коэффициента:
code_levels <- table_range[order(table_range$min), "code"]
table_range$code <- factor(table_range$code, levels=code_levels)
Воспроизводящий сюжет:
library(ggplot2)
ggplot(data = table_sum, aes(x = mes_ano, y = code)) +
geom_segment(data = table_range, size = 1.2, alpha= 0.8,
aes(x = min, xend = max, y = code, yend = code))+
geom_point(aes(shape = , color=count), size=2)
![enter image description here](https://i.stack.imgur.com/zU6Y5.png)