Magnus
Magnus

Reputation: 760

How do I use label_wrap_gen properly in this case?

I'm visualizing dropout rates from different programmes. Since most names are quite long, I want to parse them into multiple lines in my facets.

I know this should be possible, and I have managed it before. For some reason though, the code refuses to work in this case, and it's infuriating.

enter image description here

Can someone please tell me what I'm doing wrong and how to fix it?

I'm using the following code:

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")

An excerpt of my data:

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))

Upvotes: 1

Views: 1035

Answers (1)

Magnus
Magnus

Reputation: 760

There are two issues here. Firstly, the label_wrap_gen()-function needes whitespaces in order to know where to parse the text. Since there are no whitespaces in the names they can't be parsed. Secondly, it might be better to use the newer syntax:

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

I ended up with this piece of code which actually worked:

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")

Upvotes: 1

Related Questions