Как правильно использовать label_wrap_gen в этом случае? - PullRequest
0 голосов
/ 23 апреля 2020

Я визуализирую показатели отсева из разных программ. Поскольку большинство имен довольно длинные, я хочу разбить их на несколько строк в своих фасетах.

Я знаю , это должно быть возможно , и я справился с этим раньше. По какой-то причине код отказывается работать в этом случае, и это бесит.

enter image description here

Может кто-нибудь сказать мне, что я делаю неправильно и как это исправить?

Я использую следующее код:

df%>%
filter(ADMISSIONROUND_ID=="HT2019")%>%
ggplot(aes(x=factor(1), fill=status))+
geom_bar(width=1, position = position_fill())+
coord_polar("y")+
scale_y_continuous(labels = scales::percent)+
facet_wrap(~program, labeller = label_wrap_gen(width=10))+
ylab("andel studenter")+
xlab("")+
labs(fill="Status i början på programmet")

Выдержка из моих данных:

structure(list(program = c("Programmet_för_Socialpsykiatrisk_vård", 
"Programmet_för_Socialpsykiatrisk_vård", "Specialistsjuksköterska_Palliativ_vård_deltid", 
"Specialistsjuksköterska_DSK_Folkhälsa_deltid", "Programmet_för_Socialpsykiatrisk_vård", 
"Specialistsjuksköterska_Palliativ_vård_deltid", "Specialistsjuksköterska_DSK_Folkhälsa", 
"Programmet_för_Socialpsykiatrisk_vård", "Programmet_för_Socialpsykiatrisk_vård", 
"Sjuksköterskeprogrammet", "Specialistsjuksköterska_DSK_AIH_deltid", 
"Sjuksköterskeprogrammet", "Programmet_för_Socialpsykiatrisk_vård", 
"Programmet_för_Socialpsykiatrisk_vård", "Specialistsjuksköterska_DSK_Folkhälsa_deltid", 
"Sjuksköterskeprogrammet", "Specialistsjuksköterska_DSK_Folkhälsa_deltid", 
"Programmet_för_Socialpsykiatrisk_vård", "Specialistsjuksköterska_Palliativ_vård_deltid", 
"Specialistsjuksköterska_DSK_Folkhälsa", "Specialistsjuksköterska_Intensivvård_deltid", 
"Specialistsjuksköterska_DSK_AIH_deltid", "Programmet_för_Socialpsykiatrisk_vård", 
"Sjuksköterskeprogrammet", "Specialistsjuksköterska_Intensivvård", 
"Sjuksköterskeprogrammet", "Specialistsjuksköterska_DSK_Folkhälsa_deltid", 
"Sjuksköterskeprogrammet", "Programmet_för_Socialpsykiatrisk_vård", 
"Programmet_för_Socialpsykiatrisk_vård", "Specialistsjuksköterska_DSK_Folkhälsa_deltid", 
"Specialistsjuksköterska_Diabetes_deltid", "Specialistsjuksköterska_DSK_Folkhälsa_deltid", 
"Specialistsjuksköterska_Diabetes_deltid", "Sjuksköterskeprogrammet", 
"Sjuksköterskeprogrammet", "Programmet_för_Socialpsykiatrisk_vård", 
"Specialistsjuksköterska_DSK_Folkhälsa_deltid", "Sjuksköterskeprogrammet", 
"Specialistsjuksköterska_Intensivvård", "Sjuksköterskeprogrammet", 
"Sjuksköterskeprogrammet", "Specialistsjuksköterska_psykiatri_deltid", 
"Sjuksköterskeprogrammet", "Specialistsjuksköterska_psykiatri_deltid", 
"Sjuksköterskeprogrammet", "Sjuksköterskeprogrammet", "Specialistsjuksköterska_DSK_Folkhälsa_deltid", 
"Specialistsjuksköterska_DSK_Folkhälsa", "Sjuksköterskeprogrammet"
), status = c("återbud innan start", "påbörjat studier", "återbud innan start", 
"återbud innan start", "påbörjat studier", "påbörjat studier", 
"påbörjat studier", "påbörjat studier", "återbud innan start", 
"påbörjat studier", "tidigt avbrott?", "återbud innan start", 
"påbörjat studier", "påbörjat studier", "återbud innan start", 
"tidigt avbrott?", "påbörjat studier", "påbörjat studier", "påbörjat studier", 
"tidigt avbrott?", "påbörjat studier", "tidigt avbrott?", "påbörjat studier", 
"uteblivit", "påbörjat studier", "påbörjat studier", "återbud innan start", 
"påbörjat studier", "påbörjat studier", "uteblivit", "återbud innan start", 
"återbud innan start", "återbud innan start", "påbörjat studier", 
"påbörjat studier", "påbörjat studier", "tidigt avbrott?", "tidigt avbrott?", 
"uteblivit", "påbörjat studier", "påbörjat studier", "påbörjat studier", 
"tidigt avbrott?", "påbörjat studier", "tidigt avbrott?", "påbörjat studier", 
"återbud innan start", "återbud innan start", "påbörjat studier", 
"tidigt avbrott?"), ADMISSIONROUND_ID = structure(c(15L, 15L, 
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L), .Label = c("HT2005", 
"HT2006", "HT2007", "HT2008", "HT2009", "HT2010", "HT2011", "HT2012", 
"HT2013", "HT2014", "HT2015", "HT2016", "HT2017", "HT2018", "HT2019", 
"HT2020", "VIFYHT19", "VIFYHT20", "VT2006", "VT2007", "VT2008", 
"VT2009", "VT2010", "VT2011", "VT2012", "VT2013", "VT2014", "VT2015", 
"VT2016", "VT2017", "VT2018", "VT2019", "VT2020"), class = c("ordered", 
"factor"))), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-50L))

1 Ответ

0 голосов
/ 23 апреля 2020

Здесь есть две проблемы. Во-первых, функция label_wrap_gen () нуждается в пробелах, чтобы знать, где анализировать текст. Поскольку в именах нет пробелов, они не могут быть проанализированы. Во-вторых, может быть лучше использовать более новый синтаксис:

facet_wrap(
    ~program, labeller = labeller(
      program = label_wrap_gen(width = 10)))

Я получил этот фрагмент кода, который действительно работал:

totdata%>%
  filter(ADMISSIONROUND_ID=="HT2019")%>%
  mutate(program=str_replace_all(program,"_"," "))%>%
  mutate(program=str_replace_all(program, "Specialistsjuksköterska", "specialistssk"))%>%
  mutate(program=str_replace_all(program, "Sjuksköterskeprogrammet", "SSK programmet"))%>%
  mutate(program=str_replace_all(program,"Socialpsykiatrisk","Soc-Psyk"))%>%
  ggplot(aes(x=factor(1), fill=status))+
  geom_bar(width=1, position = position_fill())+
  coord_polar("y")+
  scale_y_continuous(labels = scales::percent)+
  facet_wrap(
    ~program, labeller = labeller(
      program = label_wrap_gen(width = 10)))+
ylab("andel studenter")+
xlab("")+
labs(fill="Status i början på programmet")
...