2015-07-12 7 views
16

Aus verschiedenen Gründen versuche ich, das unten gezeigte groteske Diagramm zu duplizieren. Es verstößt gegen viele Grundsätze einer guten Datenvisualisierung. Daher ist es für Trainingszwecke mein Ziel, ggplot2 zu verwenden und es zu dekonstruieren - schlecht ausgewählte Funktionen nacheinander zu entfernen oder zu überarbeiten. Mit den unten wiedergegebenen Daten und dem Code unter der Handlung komme ich näher, konnte aber nicht herausfinden, wie man eine bemerkenswerte Funktion einbezieht.Wie können Sie mit ggplot2 eine Box um ein Häkchen erstellen?

Frage: Gibt es eine Möglichkeit, das schwarz schattierte Rechteck um die drei Hilfsstrichsbeschriftungen zu reproduzieren? (Wenn ja, ist es einfach, einen anderen Faktor Variable zu erstellen, diese drei Etiketten zu identifizieren und ihre Schrift auf weißem zu ändern.)

enter image description here

ggplot(plotpg19, aes(x = risks, y = scores, fill = colors)) + 
    geom_bar(stat = "identity", width = 0.6) + 
    scale_fill_manual(values = c("grey50", "deepskyblue2", "mediumorchid3", "gold")) + 
    geom_text(aes(label = scores), hjust = -0.4, size = 8, face = "bold") + 
    coord_flip() + 
    theme_bw() + labs(x = NULL, y = NULL) + 
    theme(panel.grid.major = element_blank()) + 
    guides(fill = FALSE) + 
    scale_y_continuous(breaks = seq(0, 100, 20), labels = seq(0, 100, 20), expand = c(0,0)) + 
    theme(panel.border = element_blank(), axis.line = element_line(colour = "black", size = 5,                linetype ="solid", lineend = "square")) + 
    geom_hline(yintercept = seq(0, 80, 10), colour="grey30", size = .5, linetype="dotted") + 
    theme(axis.line.x = element_blank()) # to get a single axis border, must format both and then blank one 

enter image description here BTW, diese Frage uses symbols for tick labels kann einige Einblicke bieten die Verwendung von grImport Paket, aber seine Lehren sind über mich hinaus und ich bin auf der Suche nach einer schattierten Box um bestimmte Tick-Etiketten.

dput(plotpg19) 

structure(list(risks.format = structure(c(2L, 3L, 1L, 4L, 5L, 
              7L, 8L, 6L), .Label = c("Geographic locations in which\n         the company operates", 
                    "Inadequate resources for anti-bribery/\ncorruption compliance activities", 
                    "Industries/sector(s) in which\n         the company operates", 
                    "Lack of anti-bribery/corruption training\n         or awareness within the business", 
                    "Lack of understanding\n         by top executives", 
                    "Other", "Rogue employees", "Third parties/associates\n         acting on our behalf" 
             ), class = "factor"), risks = structure(c(8L, 7L, 6L, 5L, 4L, 
                        3L, 2L, 1L), .Label = c("Other", "Third parties/associates acting on our behalf", 
                              "Rogue employees", "Lack of understanding by top executives", 
                              "Lack of anti-bribery/corruption training or awareness within the business", 
                              "Geographic locations in which the company operates", "Industries/sector(s) in which the company operates", 
                              "Inadequate resources for anti-bribery/corruption compliance activities" 
                        ), class = "factor"), scores = c(15, 28, 71, 16, 5, 48, 55, 2 
                        ), colors = c("A", "A", "B", "A", "A", "C", "D", "A")), .Names = c("risks.format", 
                                         "risks", "scores", "colors"), row.names = c(NA, -8L), class = "data.frame") 
+0

Der einzige Ansatz, den ich von ist denken kann, um den Plot zu erstellen und 'ggplot_build' anrufen und' ggplot_gtable' manuell die Raster-Version zu erhalten die Handlung und dann, um die entsprechenden groabs manuell zu bearbeiten. –

Antwort

3

Ich denke, Ihre beste Wette ist, an der Stelle der Hilfsstrichbeschriftungen Ansichtsfenster zu erstellen und dort ein schwarzes Rechteck und einen weißen Text zu zeichnen. Zum Beispiel:

vp1 <- viewport(x = 0.225, y = 0.55, width = 0.45, height = 0.07) 
grid.rect(gp = gpar(fill="black"), vp = vp1) 
grid.text("Lack of anti-bribery corruption training or awareness within the business", gp=gpar(col="white", cex = 0.6), vp = vp1) 

Werden Ihnen die Grafik unten geben: enter image description here

0

etwas off-topic, aber dies ist eine vorgeschlagene schnelle und unsaubere Abhilfe: exportieren Sie die Grafik als PNG (Bitmap-) oder SVG (Vektor-basiert) und manuell die schwarzen Blöcke mit weißen Text hinzufügen.

+0

Sie könnten es auch ausdrucken und "es schwarz" malen? ;-) – RHA

+0

Vielleicht. Aber dann müsste man es auch einscannen :-) – hackR

+0

True. Ich muss an etwas anderes denken! @hackR – RHA

Verwandte Themen