2017-01-11 2 views
1

Ich versuche, Grafiken für monatliche Diagramme zu automatisieren/halbautomatisch zu erstellen, die die Anzahl der spezifischen/markierten Organismen in Krankenhausstationen anzeigen. Ich verwende dafür ein gestapeltes Balkendiagramm. Das Problem ist, dass wenn ich die Organismen aus meinem Datensatz ausschließe, es offensichtlich nicht in meiner Legende erscheint. Meine dumme Lösung ist, die Organismen hinzuzufügen, die für den bestimmten Monat nicht gefunden wurden, und die Station als nichts oder eher "leer" zu bezeichnen. So bekomme ich meine Legende so, wie ich es möchte. Das Problem ist jetzt, dass, wie Sie am Ende des Diagramms sehen können, ich die "" - Abteilung gezeigt habe. Das sieht unprofessionell aus. Andere Sache, die ich ausprobiert habe, ist es, geom_blank zu verwenden und die Etiketten so hinzuzufügen, wie ich es möchte, aber dann die nicht getesteten Organismen nicht einschließend - es hat nicht funktioniert. Gibt es eine Möglichkeit, eine Legende zu zwingen, genau das zu sein, was ich möchte, unabhängig davon, ob die Daten enthalten sind oder nicht.R gplot geom_bar, inkl. Etiketten, auch wenn Daten fehlen

library(ggplot2) 

ward_stats <- read.csv("ward_stats.csv") 

#specific colors for specific organisms 
my_colours <- c("Acinetobacter baumannii (Carbapenem resisistant)" = "red3", 
       "Pseudomonas aeruginosa (MDR)" = "gold", 
       "Enterobacter cloacae (ESBL)" = "purple", 
       "Enterococcus faecium (VRE)" = "violet", 
       "Escherichia coli (ESBL)" = "dodgerblue1", 
       "Klebsiella pneumoniae (ESBL)" = "yellowgreen", 
       "Mycobacterium tuberculosis complex" = "black", 
       "Staphylococcus aureus (MRSA)" = "turquoise", 
       "Klebsiella pneumoniae (Carbapenem resistant)" = "grey", 
       "Clostridium difficile" = "sienna4") 

#A vector of organisms on the flag list in the order we want to show in the legend 
targetOrder <- c("Acinetobacter baumannii (Carbapenem resisistant)", "Pseudomonas aeruginosa (MDR)", 
       "Enterobacter cloacae (ESBL)", "Escherichia coli (ESBL)", "Klebsiella pneumoniae (ESBL)", 
       "Klebsiella pneumoniae (Carbapenem resistant)", "Staphylococcus aureus (MRSA)", "Enterococcus faecium (VRE)", 
       "Clostridium difficile", "Mycobacterium tuberculosis complex") 


p <- ggplot(data=ward_stats,aes(x=ward_stats$Ward.Name, 
           y=ward_stats$freq, 
           fill=ward_stats$Result...Organism.Identified)) 
p <- p + geom_bar(stat="identity") 
p <- p + geom_text(aes(y=cum_freq, label=freq), hjust= 2, color='white') 
p <- p + coord_flip() 
p <- p + ggtitle("Hospital") 
p <- p + theme(plot.title = element_text(size=20, face="bold")) 
p <- p + labs(x=NULL, y= "Number cultured per ward", vjust = -2) 
p <- p + theme(axis.title.x = element_text(color="black", vjust=-2, size=12)) 
p <- p + theme(axis.text.x=element_text(size=10, vjust=0.5)) 
p <- p + theme(legend.title=element_blank()) 
p <- p + scale_fill_manual(values = my_colours, breaks = targetOrder) 
p <- p + theme(panel.background = element_rect(fill="#e6e6ff")) 

#pdf_title <- paste(graph_title,".pdf", sep="") 
#ggsave("graph.pdf", plot=p, width = 10, height = 8, units = "in") 

print(p) 

my_graph

Blick auf die Unterseite des Graphen aus den obigen Link, beachten Sie, dass ein leerer Ort/Rohling an der Zecke ist.

The Data

+0

Ich kann falsch liegen, aber haben Sie versucht, Ebenen vor dem Plotten fallen lassen? –

Antwort

0

Was ich habe, ist hoc ganz ad getan, aber es sollte funktionieren.

p <- ggplot(data=ward_stats,aes(x=ward_stats$Ward.Name, 
           y=ward_stats$freq, 
           fill=ward_stats$Result...Organism.Identified)) 
p <- p + geom_bar(stat="identity") 
p <- p + geom_text(aes(y=cum_freq, label=freq), hjust= 2, color='white') 
p <- p + coord_flip(xlim = c(2, 23)) 
p <- p + ggtitle("Hospital") 
p <- p + theme(plot.title = element_text(size=20, face="bold")) 
p <- p + labs(x=NULL, y= "Number cultured per ward", vjust = -2) 
p <- p + theme(axis.title.x = element_text(color="black", vjust=-2, size=12)) 
p <- p + theme(axis.text.x=element_text(size=10, vjust=0.5)) 
p <- p + theme(legend.title=element_blank()) 
p <- p + scale_fill_manual(values = my_colours, breaks = targetOrder) 
p <- p + theme(panel.background = element_rect(fill="#e6e6ff")) 
p <- p + theme(axis.ticks.y = element_line(colour = c('white', rep('black', 22)))) 

p 

Was ich getan habe, ist im Inneren des coord_flip() Funktion ich das Argument Xlim verwendet und alles, aber das erste Element ausgewählt (dies vor dem coord_flip geschieht).

p <- p + coord_flip(xlim = c(2, 23)) 

Dies führte dazu, dass die Zecke außerhalb der Parzelle noch sichtbar war. Dies wurde durch individuelle Einstellung der Farben für die Ticks behoben.

p <- p + theme(axis.ticks.y = element_line(colour = c('white', rep('black', 22)))) 
Verwandte Themen