Графики плотности ядра и наложение гистограммы

поэтому я нашел способ наложить мою функцию плотности KDE на мою гистограмму с помощью ggplot2, однако я заметил, что моя ось y гистограммы является правильной частотой, но я хочу сделать вторичную ось y для моего графика плотности, Я также не знаю, как масштабировать график плотности.

код, который я использую:

data_set <- mammals

library(ggplot2)
ggplot(data=data_set, aes(data_set$`Total Averages`))+
  geom_histogram(col='black', fill = 'white', binwidth = 0.5)+
  labs(x = 'Log10 total body mass (kg)', y = 'Frequency', title = 'Average body mass (kg) of mammalian species (male and female)')+
  geom_density(col=2)

Я разместил ссылку на изображение ниже, как выглядит мой сюжет

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


person Thanushan Ravishankar    schedule 17.02.2020    source источник
comment
Что такое mammals? Это из пакета? Если да, то можно уточнить какой? Если это ваш собственный набор данных, можете ли вы предоставить воспроизводимый пример вашего набора данных, перейдя по этой ссылке: stackoverflow.com/questions/5963269/   -  person dc37    schedule 17.02.2020


Ответы (1)


Ваша гистограмма построена с использованием count на bins ваших данных. Чтобы получить плотность scaled, вы можете изменить представление плотности, передав, например, y = ..count...

Если вы хотите представить масштаб этой плотности (например, масштабированный до максимума 1), вы можете передать аргумент sec.axis в scale_y_continuous (многие сообщения на SO разработали использование этой конкретной функции) следующим образом:

df <- data.frame(Total_average = rnorm(100,0,2)) # Dummy example

library(ggplot2)
ggplot(df, aes(Total_average))+
  geom_histogram(col='black', fill = 'white', binwidth = 0.5)+
  labs(x = 'Log10 total body mass (kg)', y = 'Frequency', title = 'Average body mass (kg) of mammalian species (male and female)')+
  geom_density(aes(y = ..count..), col=2)+
  scale_y_continuous(sec.axis = sec_axis(~./20, name = "Scaled Density"))

и вы получаете:

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

Это отвечает на ваш вопрос?

person dc37    schedule 17.02.2020
comment
Спасибо большое, наконец-то я могу начать писать диссертацию. :) - person Thanushan Ravishankar; 18.02.2020
comment
Извините, но не могли бы вы объяснить, почему или как вы выбрали ~./20, потому что я просто пытался использовать 20, и это далеко, есть ли способ определить, что лучше, без проб и ошибок? - person Thanushan Ravishankar; 18.02.2020
comment
Поскольку в моем примере наибольшее значение на левой оси было 20, поэтому я просто делю на 20, чтобы получить все шкалы от 0 до 1. На вашем графике кажется, что ваше максимальное значение равно 30 (но, возможно, density выйдет за пределы ), поэтому вам придется соответствующим образом адаптироваться. - person dc37; 18.02.2020