#r #ggplot2 #histogram
#r #ggplot2 #гистограмма
Вопрос:
Я хотел создать гистограмму с рядом целочисленных данных. Поэтому из-за большого диапазона по оси x я решил использовать логарифмическую шкалу для оси x. Но на графике есть пробел между числами «1», «2» и «3». Может ли кто-нибудь помочь мне с причиной и сказать, как удалить эти пробелы?
Вот мой код:
H1 lt;- as.data.frame(floor(runif(10000, min = 1, max = 100))) colnames(H1) lt;- "H" breaks lt;- c(1,2,3,4,5,6,7,8,9,10,100,500,1000,max((H1$H))) ggplot (H1, aes(H)) geom_histogram(colour="darkgreen", size=1, fill="green", binwidth = 0.1) stat_bin(geom="text", aes(label=..count..) , hjust=-0.4, vjust = 0.4, binwidth = 0.1 , angle = 90, size = 2.5) scale_x_log10('Integer Data', breaks = breaks, labels = breaks, expand = expansion(mult = c(0, 0.01))) scale_y_continuous('Count', expand = expansion(mult = c(0, 0.1))) theme(axis.text.x = element_text(size = 8, angle = 60, vjust = 0.8, hjust=1))
И это результат:
Комментарии:
1. Если вы ожидаете, что между 1 и 2 не будет большего пространства, чем между 2 и 3, и большего пространства между 2 и 3, чем между 3 и 4, и так далее, возможно, вам на самом деле не нужна логарифмическая шкала. Именно так работают логарифмические шкалы по определению. У вас также не будет ячеек, которые совпадают со всеми этими целыми числами.
Ответ №1:
Когда вы используете логарифмическую шкалу для гистограммы, вы должны убедиться, что в каждом ячейке содержится разумное количество элементов. Вы сгенерировали свои данные с runif
таким равномерным распределением. Это означает, что между 1 и 10 будет гораздо меньше элементов, чем между 10 и 100. Поскольку вы зафиксировали определенное количество breaks
и определенное binwidth
количество, вы получаете пустые контейнеры.
Что вы можете сделать, так это изменить binwidth
или количество bins
. Например:
ggplot(H1, aes(H)) geom_histogram(colour="darkgreen", size=1, fill="green", bins = 10) stat_bin(geom="text", aes(label=..count..) , hjust=-0.4, vjust = 0.4, bins = 10 , angle = 90, size = 2.5) scale_x_log10('Integer Data', expand = expansion(mult = c(0, 0.01))) scale_y_continuous('Count', expand = expansion(mult = c(0, 0.1))) theme(axis.text.x = element_text(size = 8, angle = 60, vjust = 0.8, hjust=1))
Я удалил breaks
и labels
, потому что центр ячейки больше не приходится на целые числа.