График плотности ggplot дает неожиданный результат

У меня есть вопрос относительно плотностных графиков с использованием ggplot. Чтобы прояснить мою проблему, я создал следующие примеры данных:

DT2 <- data.table(Rating = c(1:19),
            Nndef = c(50, 30, 70, 70, 60, 40, 60, 30, 30, 10,
                      5, 3, 1, 0, 0, 0, 0, 0, 0))

Теперь я хочу построить график плотности числа Nndefs на категорию рейтинга. Перед тем, как сделать это, я копирую каждую строку по количеству Nndef, так что каждая категория рейтинга встречается Nndef раз.

DT2 <- DT2[rep(1:.N,Nndef)]

Теперь это должно сделать свое дело:

ggplot(DT2, aes(x =Rating))+ theme_bw() +
geom_density(aes(x=Rating))

что дает мне введите описание изображения здесь

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

DT1 <- data.table(Rating = c(1:19),
            Nndef = c(460, 480, 1300, 2600, 5700, 4700, 9300, 10600, 7700, 8200,
                      6500, 6700, 5300, 4700, 2700, 1100, 1200, 400, 420))
DT1 <- DT1[rep(1:.N,Nndef)]
ggplot(DT1, aes(x =Rating))+ theme_bw() +
geom_density(aes(x=Rating))

что приводит к этому введите описание изображения здесь

Я знаком с adjust аргумент в geom_density но я бегу много этих ggplots в for петля. Я хочу получить плавный график плотности (как и первый, использующий DT2), но не хочу вручную настраивать каждую фигуру самостоятельно. Кроме того, я не понимаю, почему оно дает странное распределение плотности в последнем случае и достаточно точное в первом случае. Какие-нибудь мысли?

заранее спасибо

1 ответ

Решение

Вы можете ограничить поправочный коэффициент до доли уникальных значений "x":

ggplot(DT1, aes(x =Rating))+ theme_bw() +
      geom_density(aes(x=Rating), adjust=length(unique(x))/10)

введите описание изображения здесь

Другие вопросы по тегам