2016-12-28 18 views
0

Я использую plotly построить гистограмму для набора данных, я работаю сплотности над plotly гистограммы

test <- data.frame(y = rgamma(1000, shape = 0.25, rate = 0.0054)) 
plot_ly(x = ~test$y, type = "histogram", nbinsx = "23") 

Сюжета как таковое это хорошо, но я не ясно, как нарисовать кривую гладкую плотность протекающего через контуры гистограммы.

Plotly reference manual предполагает,

Гистограмма трассировки инициализируется с plot_ly или add_trace:

plot_ly(df, type="histogram"[, ...]) 
add_trace(p, type="histogram"[, ...]) 

и есть функция histnorm (enumerated: "" | "percent" | "probability" | "density" | "probability density") histonorm, который я предположить, позволит пользователям нарисовать кривую плотности, но Я не уверен, как использовать эту функцию.

Заинтересованы в том, как другие подошли к этой проблеме. Любые советы или предложения очень ценятся.

+1

Интересно, если один из способов может быть 'плотности scale' так, что более ясно на участке. 'test = data.frame (y = rgamma (1000, shape = 0,25, rate = 0,0054)); fit = плотность (тест $ y); scale = 500/max (fit $ y); plot_ly()%>% add_histogram (x = ~ test $ y, name = "Histogram")%>% add_lines (x = fit $ x, y = scale * fit $ y, name = "Density") ' –

+0

@DarshanBaral это интересно –

ответ

0

Один из вариантов, самый простой, если вы более знакомы с API-интерфейсом ggplot, чем plotly (как и я), это сначала сделать график с ggplot2.

library(plotly) 
library(ggplot2 
test <- data.frame(y = rgamma(1000, shape = 0.25, rate = 0.0054)) 

p <- ggplot(test, aes(x = y, y = ..density..)) + 
    geom_histogram(fill = "steelblue", bins = 23) + 
    geom_density() 

ggplotly(p) 

enter image description here

+0

Я пробовал ggplot, но я не могу подавить значения оси y, создаваемые графиком плотности, и показать количество частот из гистограммы. –

0

Пока не идеально - вот один из способов сделать это.

EDIT: обновленные за пределы оси Y

library(plotly) 

y <- rgamma(1000, shape = 0.25, rate = 0.0054) 
dens <- data.frame(x = density(y)$x, 
        y = density(y)$y) 

miny <- 0 
maxy <- max(dens$y) 

plot_ly() %>% 
    add_histogram(x = y) %>% 
    add_lines(data = dens, x = ~x, y = ~y, yaxis = "y2", 
      line = list(width = 3)) %>% 
    layout(yaxis2 = list(overlaying = "y", 
         side = "right", 
         range = c(miny, maxy), 
         showgrid = F, 
         zeroline = F)) 
+0

есть дополнительная линия на оси x может быть связана с плотностью –

 Смежные вопросы

  • Нет связанных вопросов^_^