Im Folgenden finden Sie ein reproduzierbares Beispiel für das Problem, das ich lösen möchte. Ich habe in ggplot2 eine Heatmap erstellt und die Dinge laufen gut. Da ich Prozentzeichen auf die Daten gesetzt habe, die mit geom_text verwendet werden, möchte ich die Legende von geom_tile auch dazu bringen, Prozentzeichen anzuzeigen (ich kann die tatsächlichen Werte nur mit 100 multiplizieren). Idealerweise hätte ich gerne den Legendenbalken auf der rechten Seite, der 8%, 4%, 0%, -4%, -8% anzeigt.Rufen Sie die ggplot2-Legende auf, um das Prozentzeichen in r anzuzeigen
#load in libraries
require(plyr)
require(dplyr)
require(reshape2)
require(ggplot2)
require(scales)
testDF <- structure(list(strategies = structure(c(8L, 7L, 6L, 5L, 4L, 3L,
2L, 1L), .Label = c("Class 1", "Class 2",
"Class 3", "Class 4", "Class 5", "Class 6",
"Class 7", "Class 8"), class = "factor"),
School1 = c(0.0355662887589396, 0.0316753241146625, 0.00606392341292672,
0.0250738342627283, -0.0405709181701368, 0.0237665074609996,
0.00587364885411765, -0.0343914002059331), School2 = c(NA, NA,
NA, 0.0225535750673764, NA, -0.00448947685878404, NA, -0.0446386763157662
), School3 = c(NA, NA, NA, 0.0261099462365593, NA, 0.0199735626692146,
NA, -0.0272279264519992), School4 = c(NA, NA, NA, 0.0164004151291513,
NA, 0.00567638888888868, NA, -0.0384017249374949)), .Names = c("schools",
"School1", "School2", "School3", "School4"), row.names = c(NA, -8L), class = "data.frame")
GraphMelt <- melt(testDF)
GraphMelt <- GraphMelt %>% mutate(text = sprintf("%1.2f%%", 100*value))
GraphMelt[,"text"] <- ifelse(GraphMelt[,"text"]=="NA%",NA,GraphMelt[,"text"])
p <- ggplot(GraphMelt, aes(variable, schools))
p <- p + geom_tile(aes(fill = value*100), colour = "white") + geom_text(aes(label=text),size=7)
p <- p + scale_fill_gradient(low = "red", high = "green",limits=c(-8,8))
p <- p + theme(
axis.text.x= element_text(color="black", size=14, vjust=0.5),
axis.text.y= element_text(color="black", size=14, vjust=0.5),
axis.title.y = element_text(color="black",size=14, vjust=0.5),
plot.title = element_text(color="black",size=14,face="bold", hjust=0.5,vjust=1),
panel.background = element_blank(),
legend.position="right",
legend.title = element_blank(),
legend.key = element_rect(fill="white"), legend.background = element_rect(fill=NA)
)
p <- p + xlab("") + ylab("") + ggtitle("Schools")
Nur ein Vorschlag --- Das nächste Mal, anstelle von "dput" rohe Daten, dann laden plyr und dplyr und reshape2 und Umgestaltung in 'GraphMelt', dann Plotten, einfach' dput (GraphMelt) ', so dass der Code in Ihrer Frage einfacher ist und wir muss nicht geladen werden 3 zusätzliche Pakete zum Ausführen Ihres Codes Danke, dass Sie Dinge reproduzierbar machen! – Gregor
Das ist wirklich gutes Feedback und macht total Sinn. Ich versuche immer noch, den Dreh raus zu bekommen und versuche nur Fragen zu stellen, wenn ich wirklich feststecke. Mein nächster Post wird besser sein! –
Keine Sorge! Sie machen bereits sehr gut reproduzierbare Beispiele - die Herausforderung besteht darin, sie zu minimieren, ohne zu viel zu schneiden. In diesem Fall dreht sich alles um eine Anzeigeoption für die Darstellung, so dass die Datenbearbeitung nicht notwendig ist. Manchmal ist es jedoch wichtig, ein wenig mehr von dem Prozess zu sehen, etwa wenn es dort einen potenziellen Fehler gibt. – Gregor