Цветовая гистограмма по стандартному отклонению сюжетно R

Я генерирую гистограмму, представляющую нормально распределенные данные. Я хотел бы покрасить гистограмму на основе стандартного отклонения от среднего (т.е. в пределах одного SD = синий, 2 = зеленый, 3 = оранжевый).

Вот фрагмент кода, который я использую:

x <- rchisq(1000, 50, 10)
plot_ly(x=x, type="histogram")

person Isaac    schedule 14.02.2018    source источник


Ответы (2)


Я не думаю, что это возможно точно определить для стандартного отклонения, которое хочет пользователь, но я думаю, что это хорошая альтернатива, используя ggplot2 и функцию ggplotly plotly.

x <- rchisq(1000, 50, 10)
p = qplot(x =x, fill=..count.., geom="histogram",bins=30) +
  scale_fill_gradient(low="orangered2",high="yellow",guide = 'none')+
  theme_bw()+labs(y="")
ggplotly(p)
person Alejandro Andrade    schedule 15.02.2018

Как упомянул @Alejandro Andrade, это, вероятно, невозможно с plot_ly, но если вы действительно хотите иметь три категории цветов, вы можете обмануть его и использовать geom_bar. Вы можете попробовать:

#Create aplot and then extract the data
a <- ggplot(data=x, aes(x)) + geom_histogram()
temp <- layer_data(a, 1)

#calculate the mean and sd you want. Just an example
mean_vt <- mean(temp$x)
sd_vt <- sd(temp$x)
sd_vt2 <- 2*sd(temp$x)
sd_vt3 <- 3*sd(temp$x)

#create a new category for colors
temp$Color <- 
    ifelse(temp$x >= (mean_vt-sd_vt) & temp$x <= (mean_vt+sd_vt), "SD1", 
    ifelse(temp$x >= (mean_vt-sd_vt2) & temp$x <= (mean_vt+sd_vt2), "SD2", 
            ifelse(temp$x >= (mean_vt-sd_vt3) & temp$x <= (mean_vt+sd_vt3), "SD3",         
"NA")))

#and then plot using ggplotly
pp <- ggplot(data = temp, aes(x =x,y=y, fill=Color)) + 
  geom_bar(stat = 'identity', width = 2.5) +
  scale_fill_manual(values = c("blue", "green", "orange"))

ggplotly(pp)
person MLavoie    schedule 15.02.2018