I have a dataframe which I used the melt function to get to this (length = 118):
record_id value Values
1 8 int_to_out 20
2 14 int_to_out 32
3 5 int_to_out 22
4 6 int_to_out 19
5 31 int_to_out 15
6 48 int_to_out 20
7 100 int_to_out 30
... ... ... ...
113 87 symptom_to_int 7
114 72 symptom_to_int 4
115 99 symptom_to_int 3
116 102 symptom_to_int 36
117 103 symptom_to_int 13
118 111 symptom_to_int 6
Я сделал сложенный штриховой график с помощью этого:
На графике 59 элементов y, и мне нужно добавить к ним точки на основе исходных (не плавленных) данных. Итак, я написал это:
ggplot(t, aes(y=as.factor(record_id), x=Values, fill=value)) +
geom_bar(position=position_stack(reverse= TRUE), stat="identity") +
geom_point(data = new_df, aes(x=sorolog, y = record_id),
colour = "#a81802", size = 4, shape = 1)
x = sorolog
имеет 59 значений для 59 идентификаторов, обнаруженных в record_id
.
Но когда я запускаю его, я получаю следующее:
Error: Aesthetics must be either length 1 or the same as the data (59): fill
Run `rlang::last_error()` to see where the error occurred.
Я считаю, что это конфликт с расплавленными данными, поскольку его длина вдвое больше исходного фрейма данных.
Возникает вопрос: как сложить баллы при такой разнице эстетической длины?
Еще одна проблема: как добавить в сюжет вторую легенду?
Я использовал этот код:
ggplot() +
geom_bar(data=t, aes(y=as.factor(record_id), x=Values, fill=value),
position=position_stack(reverse= FALSE), stat="identity", width = 0.5) +
scale_fill_manual(values = c("brown1","chocolate1"),name = "",
labels = c("Hospitalization to Discharge", "Symptom to Hospitalization")) +
geom_point(data = new_df, aes(x=sorolog, y = as.factor(record_id)),
colour = "darkcyan", size = 5, shape = 1)+
geom_point(data = new_df, aes(x=final, y = as.factor(record_id)),
colour = "darkred", size = 4, shape = 16)+
theme_minimal()+
labs(title="Patient timeline - from symptoms to hospitalization and discharge",
x ="Days", y = "Patient ID")+
theme(text = element_text(family = "Garamond", color = "grey20"))
но я не могу добавить легенду для элементов geom_point, как я могу это сделать?
ИЗМЕНИТЬ
С редактированием Дэйва Армстронга я получил следующее:
y=as.factor(record_id)
, тогда как вашnew_df
имеетy
сопоставление только сrecord_id
. Если вы заранее не установилиnew_df$record_id
на факторизацию, вероятно,ggplot2
пытается использовать это как непрерывный эстетический, а не дискретный (as.factor
). Это то, что здесь происходит? - person chemdork123   schedule 01.09.2020fill
aes (см. сообщение об ошибке), я бы попытался сделатьfill=value
локальным aes дляgeom_bar
. - person stefan   schedule 01.09.2020