Я пытаюсь воспроизвести эту гистограмму в R.
Вот как имитировать мой набор данных:
dft <- data.frame(
menutype = sample(c(1,2,4,5,6,8,12), 120, replace = T),
Belief = sample(c(0,1), 120, replace = T),
Choice = sample(c(0,1), 120, replace = T)
)
Вот мой код:
library(ggplot2)
library(dplyr)
library(tidyr)
library(MASS)
df <- data.frame(
menutype = factor(df$menutype, labels = c("GUILT" , "SSB0", "SSB1", "FLEX0", "FLEX1", "STD", "FLEX01"),
levels = c(1,2,4,5,6,8,12)),
Belief = factor(df$belieflearn, levels = c(1), labels= c("Believe Learn")), #Interested only in this condition
Choice = factor(df$learned, levels = c(1), labels= c("Learn")) #Same here
)
df1 <- rbind(na.omit(df %>%
count(Belief, menutype) %>%
group_by(menutype) %>%
mutate(prop = n / sum(n))),
na.omit(df %>%
count(Choice, menutype) %>%
group_by(menutype) %>%
mutate(prop = n / sum(n))))
test <- paste(df1$Belief[1:6],paste(df1$Choice[7:13]))
test[1:6] <- paste(df1$Belief[1:6])
test[7:13] <- paste(df1$Choice[7:13])
df1$combine <- paste(test)
ggplot(data = df1, aes(menutype, prop, fill = combine)) +
labs(title = "Classification based on rank ordering\n", x = "", y = "Fraction of subjects", fill = "\n") +
geom_bar(stat = "identity", position = "dodge")+
theme_bw() +
theme(legend.position="bottom", plot.title = element_text(hjust = 0.5)) #Centering of the main title+
#geom_text(aes(label="ok"), vjust=-0.3, size=3.5)+
Проблема в том, что он более или менее работает, я почти получаю график , который мне нужен, но это обходной путь, и все еще есть некоторые ошибки. Действительно, у меня, например, такое же значение для STD (0,10), тогда как оно должно быть 0 и 0,10, как на исходном графике.
Я бы хотел оптимально иметь два разных фрейма данных, один с menutype
и Belief
, другой с menutype
и Choice
, затем, как и я, вычислим пропорцию конкретной c модальности в каждой последней переменной на menutype
и, наконец, построим его в виде гистограмм, примерно столько же, сколько графика в исходном исследовании. Кроме того, я хотел бы иметь пропорции в виде дробей над каждой полоской, но это необязательно.
Может ли кто-нибудь помочь мне в этом вопросе? Я действительно изо всех сил пытаюсь заставить его работать.
Заранее спасибо!
РЕДАКТИРОВАТЬ : Я думаю, что проблема в fill =
. Я хотел бы указать для каждого столбца нужную мне переменную (например, fill = df2$Belief & df2$Choice
), но я не знаю, как действовать дальше.