Гистограмма R по дискретной переменной — две ячейки остаются неизменными

#r #ggplot2

#r #ggplot2

Вопрос:

Итак, я пытаюсь построить гистограмму по фрейму данных -> y для столбца -> ProsperRating..numeric. (В конце имени переменной стоит точка).

Итак, это то, что у меня пока есть. (После наложения нормальной кривой).

 h <- hist(y$ProsperRating..numeric.,breaks = c(0,1,2,3,4,5,6,7)) 
xfit <- seq(min(y$ProsperRating..numeric.) , max(y$ProsperRating..numeric.) , length = nrow(y))
yfit <- dnorm(xfit, mean = mean(y$ProsperRating..numeric.), sd = sd(y$ProsperRating..numeric.))
yfit <- yfit * length(y$ProsperRating..numeric.) *diff(h$mids[1:2]) * 1.8 
lines(xfit,yfit,lwd = 2)
  

График гистограммы — Обратите внимание, что ячейки с номерами 1 и 2 слипаются

Есть ли какой-либо другой способ, которым я мог бы сделать это тоже? Всего noob до R.

Правка 1 : Числовой рейтинг процветания — это столбец в моем фрейме данных. Она содержит значение 1-7 с шагом в 1 ( x = seq(1,7,1) ). Это то, что я пытаюсь отобразить здесь.

Правка 2: добавление новой нормальной кривой. Изменен код для отражения разрывов. Новая нормальная кривая! Понятия не имею, правильно ли это сделано.

Комментарии:

1. И в чем ваша проблема?

2. Мне не нужно, чтобы первые две ячейки оставались неизменными, как на изображении. В остальном все нормально (я думаю)

3. добавьте некоторые воспроизводимые данные, например, используя dput(your_data)

4. @Jimbou Я добавил информацию о данных!

5. Хорошо, я полагаю, что есть проблема с разрывами. Вы можете попробовать использовать breaks = seq(0, 8, 0.5) вместо breaks = 10 .

Ответ №1:

Разрывы — это только предположение.

 set.seed(1337)
hist(runif(20,1,10), breaks = 3) # only shows two bins
  

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

 set.seed(1337)
hist(rnorm(20), breaks = c(-3,-2,-1,0,1,2,3))
  

При этом ячейки «слипаются», потому что именно так это и должно выглядеть. Существует около 1000 наблюдаемых значений между 1.5 и 2. Вы могли бы разделить их, добавив ячейку, в которой между ними нет данных, или, не глядя на ваши данные, добавив ячейку от 0 до 1, это могло бы устранить визуальную проблему breaks = c(0,1,2,3,4,5,6,7) .

Я предлагаю сделать это.

 x <- c(rep(1,8000),rep(2,10000),rep(3,15000), rep(4, 20000), rep(5, 15500), rep(6, 14500), rep(7, 5000))
hist(x, breaks = c(0,1,2,3,4,5,6,7))
  

Избавляется от всех пробелов вместе, на которые, я думаю, в любом случае гораздо лучше смотреть.

Комментарии:

1. Привет, @Matt L. Это сработало отлично. Большое вам спасибо. Можете ли вы сказать мне, правильно ли выглядит нормальная кривая? У меня такое чувство, что это неверно для данного графика. Спасибо!

2. @WhatIfTheyGetMe Это выглядит правильно. Возможно, вы захотите установить t-распределение вместо нормального. У t более толстые хвосты, и я думаю, что это лучше соответствовало бы вашим данным. Чтобы исправить ограничения на новом графике, вы можете сделать это ylim = c(0,20000) внутри функции hist.