Ответ 1
Вы можете добавить drop=TRUE
в вызов geom_histogram
, чтобы сбросить ячейки с нулевым количеством отсчетов (подробнее см. ?stat_bin
):
set.seed(1)
df <- data.frame(E=sample(runif(100), 20, TRUE))
ggplot(df,aes(E)) +
geom_histogram(binwidth=0.1, drop=TRUE) +
scale_y_log10(limits=c(0.1,100)) +
xlim(0,1)
EDIT: Поскольку масштаб начинается с 1, невозможно отобразить полосу высоты 1. Как уже упоминалось в этом ответе, вы можете выбрать запуск с разных уровней, но это может ввести в заблуждение. Здесь код для этого в любом случае:
require(scales)
mylog_trans <-
function (base = exp(1), from = 0)
{
trans <- function(x) log(x, base) - from
inv <- function(x) base^(x + from)
trans_new("mylog", trans, inv, log_breaks(base = base), domain = c(base^from, Inf))
}
ggplot(df,aes(E)) +
geom_histogram(binwidth=0.1, drop=TRUE) +
scale_y_continuous(trans = mylog_trans(base=10, from=-1), limits=c(0.1,100)) +
xlim(0,1)