нежелательные пробелы по оси x на графике гистограммы

#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 , потому что центр ячейки больше не приходится на целые числа.