ggplot не рисует линии для всех уровней категорий в наборе данных - PullRequest
0 голосов
/ 07 января 2019

Я использовал этот код, чтобы нарисовать процент людей, живущих в бедности в штате Мэн. Этот штат имеет 17 округов. ggplot показывает только 14 из них:

ggplot(data=data_ME, aes(x=Year, y=PersonsinPoverty, group=Countyname, shape=Countyname, colour=URBAN)) + 
    scale_shape_manual(values = c(1:17)) +               # Set shape of each line manually
    geom_line(aes(linetype=Countyname), size=0.75) +     # Set linetype by County name
    geom_point(size=3, fill="white") +                   # Use larger points, fill with white
    #expand_limits(y=0) +                                # Set y range to include 0
    scale_colour_hue(name="Urban?",                      # Set legend title
                     l=30)  +                            # Use darker colors (lightness=30)
    #scale_linetype_discrete(name="County name") +
    xlab("Year") + ylab("% of People in Poverty") +      # Set axis labels
    ggtitle("Percent of people in poverty in Maine Counties") +     # Set title
    theme_bw() +                                        # Position legend inside
    theme(legend.position="bottom")                     # This must go after theme_bw  

Вот результат, который я получаю:

enter image description here

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Спасибо всем за помощь! Я нашел исправление (не обязательно ответ) на мой вопрос.

Кажется, у 'R' только 13 типов линий. Поэтому мне нужно удалить тип строки из моего кода. Я изменил следующую часть в моем коде:

geom_line( size=0.75)+

Результат:

enter image description here

0 голосов
/ 07 января 2019

Я думаю, что на самом деле в штате Мэн 16 округов (https://simple.wikipedia.org/wiki/List_of_counties_in_Maine),), и, согласно легенде на вашем изображении, все они отображаются (я также думаю, что могу видеть 17 различных точек, 16 округов + независимо от того, Пустая опция находится в начале каждой вертикальной полосы). Для последних четырех строк нет строк, потому что в R нет нужных типов линий.

Чтобы увидеть это поведение, запустите

date <- rep(1:5, each = 20)
val <- rnorm(200)
group <- factor(rep(1:20, times = 5))

dat <- data.frame(date, val, group)

ggplot(dat, aes(x = date, y = val, group = group)) + geom_line(aes(lty = group))

Обратите внимание, что первые 13 групп получают типы линий, а следующие семь - нет, как в вашем примере.

Lines only display for the first 13 groups

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

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

...