Меня попросили создать график, который визуализирует оценки людей по определенному тесту, который имеет среднее значение 100 и стандартное отклонение от 15.
Приведенный ниже код создает график на основе того, как он был запрошен.быть визуализированным.Я намеренно прокомментировал линии, которые фактически добавляют оценки и доверительные интервалы этих оценок, поскольку требовалось наложить нормальную кривую, имеющую пиковое среднее значение, независимо от оценок, количества оценок или пределов графика.Пик нормы должен всегда достигать вершины графика, поэтому в этом случае вершина балла 4 и хвосты нормальной кривой должны находиться на границах графика, которые в этом случае составляют 60 и 140 (номожет быть что угодно, например 40 и 160).
library(ggplot2)
data <- data.frame(name = c("Score 1", "Score 2", "Score 3", "Score 4"),
value = c(89,110,116,76),
sem = c(1.1,0.86,1.6,1.3),
categories = c("mh","cog","mh","cog"))
z <- 1.96
# plot the main data
p <- ggplot(data, aes(x = name, y = value, ymin = value - (sem * z), ymax = value + (sem * z)))
# Add ranges
p <- p + coord_flip() +
geom_rect(xmin = -Inf, xmax = Inf, ymin = 90, ymax = 110, alpha = 0.5, fill = "grey50") +
geom_rect(xmin = -Inf, xmax = Inf, ymin = 85, ymax = 90, alpha = 0.5, fill = "grey70") +
geom_rect(xmin = -Inf, xmax = Inf, ymin = 110, ymax = 115, alpha = 0.5, fill = "grey70") +
geom_hline(yintercept = 100) +
geom_hline(yintercept = 90) +
geom_hline(yintercept = 110) +
geom_hline(yintercept = 85) +
geom_hline(yintercept = 115) +
labs(title = "", x = "Test", y = "Score") +
theme(plot.title = element_text(size = 16, face = "bold"),
axis.text = element_text(size = 12),
axis.title = element_text(size = 14, face = "bold"))
# Place the breaks and limits on the plot
p <- p + scale_y_continuous(breaks = c(60,70,80,90,100,110,120,130,140), limits = c(60,140), expand = c(0,0))
# normal curve overlay here
# ?????
# Add representation of score and confidence interval
# p <- p + geom_point(aes(colour = categories)) +
# geom_errorbar(aes(colour = categories), width = .5)
# Add data labels to plot
# p <- p + geom_text(aes(label = value), size = 2) +
# geom_text(aes(label = round(value - (sem * z), digits = 0), y = value - (sem * z)), size = 2, hjust = 1.25) +
# geom_text(aes(label = round(value + (sem * z), digits = 0), y = value + (sem * z)), size = 2, hjust = -0.25)
# print the plot
p
Я рассматривал такие решения, как this или:
plot(x,y, type = "l", lwd = 2, xlim = c(-3.5,3.5))
или:
p + stat_function(fun = dnorm, color="red", args=list(mean=100, sd=15))
но у меня проблемы с интеграцией их в остальную часть кода.
Существует целый ряд других манипуляций с эстетикой, но я не думаю, что они имеют отношение к этому примеру.