Преобразование журнала ggplot2 для данных и масштабов

Это продолжение моего предыдущего вопросаИнтеграция ggplot2 с пользовательской функцией stat_function ()На что я сам ответил вчера. Мой текущийпроблема является то, что в следующем воспроизводимом примере линии, которые должны построитькомпоненты значений данных "распределение смесине появляются ни в ожидаемых местах, ни в ожидаемой форме, как показано ниже (см. красные линии при y = 0 на втором рисунке).

полныйвоспроизводимый пример:

library(ggplot2)
library(scales)
library(RColorBrewer)
library(mixtools)

NUM_COMPONENTS <- 2

set.seed(12345) # for reproducibility

data(diamonds, package='ggplot2')  # use built-in data
myData <- diamonds$price

# extract 'k' components from mixed distribution 'data'
mix.info <- normalmixEM(myData, k = NUM_COMPONENTS,
                        maxit = 100, epsilon = 0.01)
summary(mix.info)

numComponents <- length(mix.info$sigma)
message("Extracted number of component distributions: ",
        numComponents)

calc.components <- function(x, mix, comp.number) {

  mix$lambda[comp.number] *
    dnorm(x, mean = mix$mu[comp.number], sd = mix$sigma[comp.number])
}

g <- ggplot(data.frame(x = myData)) +
  scale_fill_continuous("Count", low="#56B1F7", high="#132B43") + 
  scale_x_log10("Diamond Price [log10]",
                breaks = trans_breaks("log10", function(x) 10^x),
                labels = prettyNum) +
  scale_y_continuous("Count") +
  geom_histogram(aes(x = myData, fill = 0.01 * ..density..),
                 binwidth = 0.01)
print(g)

# we could select needed number of colors randomly:
#DISTRIB_COLORS <- sample(colors(), numComponents)

# or, better, use a palette with more color differentiation:
DISTRIB_COLORS <- brewer.pal(numComponents, "Set1")

distComps <- lapply(seq(numComponents), function(i)
  stat_function(fun = calc.components,
                arg = list(mix = mix.info, comp.number = i),
                geom = "line", # use alpha=.5 for "polygon"
                size = 1,
                color = "red")) # DISTRIB_COLORS[i]
print(g + distComps)

ОБНОВИТЬПросто краткая заметка о моих усилиях. Я также попробовал несколько других вариантов, включая преобразование шкалы оси X графика внормальный и запрашивая исходные значения данныхпреобразование журнала в части гистограммы, вот так:geom_histogram(aes(x = log10(data), fill = ..count..), binwidth = 0.01), но конечный результат остается прежним. Что касается моего первого комментария, я понял, что упомянутое преобразование не требуется, если я использую ссылку на объект ..count ..

ОБНОВЛЕНИЕ 2: Изменен цвет линии, созданнойstat_function(), чтобы красный, чтобы прояснить проблему.

Ответы на вопрос(1)

Ваш ответ на вопрос