Fügen Sie Ihrem ggplot2-Text in R Farbe hinzu

Das ggplot2-Paket ist leistungsstark und fast endlos anpassbar, aber manchmal können kleine Änderungen eine Herausforderung sein. Das ggtext-Paket soll das Stylen von Text in Ihren Visualisierungen vereinfachen. In diesem Tutorial werde ich eine Text-Styling-Aufgabe durchgehen, die ich letzten Monat auf der RStudio-Konferenz vorgeführt habe: Hinzufügen von Farbe.

Wenn Sie mitmachen möchten, empfehle ich die Installation der Entwicklungsversion von ggplot2 von GitHub. Im Allgemeinen waren einige auf der Konferenz gezeigte Dinge noch nicht auf CRAN. Und ggtext funktioniert definitiv nicht mit einigen älteren Versionen von ggplot.

Sie müssen ggtext von GitHub installieren, da das Paket zu dem Zeitpunkt, als ich dies schrieb, noch nicht auf CRAN war. Ich verwende remotes::install_github(), um R-Pakete von GitHub zu installieren, obwohl einige andere Optionen, wie z. B. devtools::install_github()auch funktionieren. Beachten Sie, dass ich im folgenden Code das Argument einbinde, build_vignettes = TRUEdamit ich lokale Versionen von Paketvignetten habe. Danach lade ich ggplot2, ggtext und dplyr.

remotes :: install_github ("tidyverse / ggplot2", build_vignettes = TRUE)

remotes :: install_github ("wilkelab / ggtext", build_vignettes = TRUE)

Bibliothek (ggplot2)

Bibliothek (ggtext)

Bibliothek (dplyr)

Für Demodaten verwende ich Daten, die Tweets über R (mit dem Hashtag #rstats) mit Tweets über Python (#python) vergleichen. Nachdem ich die letzten Tweets heruntergeladen hatte, führte ich einige Filterungen durch, nahm eine Zufallsstichprobe von jeweils 1.000 und berechnete dann, wie viele in jeder Gruppe mindestens fünf Likes, mindestens fünf Retweets, eine URL und Medien wie ein Foto oder Video.

Sie können den Datensatz mit dem folgenden Codeblock neu erstellen. Oder Sie können einen beliebigen Datensatz verwenden, der als gruppiertes Balkendiagramm sinnvoll ist, und meinen nachfolgenden Diagrammcode entsprechend ändern.

Hashtag <- c ("# python", "#python", "#python", "#python", "#rstats", "#rstats", "#rstats", "#rstats")

Kategorie <- c ("FiveLikes", "FiveRTs", "HasURL", "HasMedia", "FiveLikes", "FiveRTs", "HasURL", "HasMedia")

NumTweets <- c (179, 74, 604, 288, 428, 173, 592, 293)

graph_data <- data.frame (Hashtag, Kategorie, NumTweets, stringsAsFactors = FALSE)

Der graph_dataDatenrahmen hat ein "langes" Format: eine Spalte für das Hashtag (#rstats oder #python), eine für die Kategorie, die ich messe, und eine Spalte für die Werte.

str(graph_data) 'data.frame': 8 obs. of 3 variables: $ Hashtag : chr "#python" "#python" "#python" "#python" ... $ Category : chr "FiveLikes" "FiveRTs" "HasURL" "HasMedia" ... $ NumTweets: num 179 74 604 288 428 173 592 293

Dies ist normalerweise die gewünschte Struktur für die meisten ggplot-Diagramme. 

Als nächstes erstelle ich ein gruppiertes Balkendiagramm und speichere es in der Variablen my_chart.

my_chart <- ggplot (graph_data, aes (x = Kategorie, y = NumTweets, fill = Hashtag)) +

geom_col (position = "ausweichen", alpha = 0,9) +

theme_minimal () +

xlab ("") +

ylab ("") +

Thema (panel.grid.major = element_blank (), panel.grid.minor = element_blank (), panel.background = element_blank (), axis.line = element_line (color = "grey")) +

scale_fill_manual (Werte = c ("# ff8c00", "# 346299"))

Die alpha = 0.9zweite Zeile macht die Balken nur ein wenig transparent ( alpha = 1.0ist vollständig undurchsichtig). Mit den letzten Linien wird das Erscheinungsbild des Diagramms angepasst: Verwenden des minimalen Designs, Entfernen von Beschriftungen der x- und y-Achse, Entfernen von Standardgitterlinien und Festlegen von Farben für die Balken. Das Diagramm sollte folgendermaßen aussehen, wenn Sie den Code ausführen und dann Folgendes anzeigen my_chart:

Sharon Machlis,

Als nächstes werde ich einen Titel mit diesem Code hinzufügen:

my_chart +

labs (title = "#python und #rstats: Vergleich von 1.000 zufälligen Tweets")

Sharon Machlis,

Es sieht aus . . . IN ORDNUNG. Aber auf einer separaten RStudio-Konferenzsitzung, The Glamour of Graphics, sagte Will Chase, dass Legenden weniger als ideal sind (obwohl er dies in einer etwas farbenfroheren Sprache betonte). Er hat gezeigt, dass das Hinzufügen von Farben direkt in der Grafiküberschrift Ihre Grafiken verbessern kann. Wir können das ziemlich einfach mit dem ggtext-Paket machen.

Wenn Sie ein wenig HTML-Stil mit Inline-CSS kennen, können Sie Ihren Text auf jeden Fall anpassen. Im folgenden Code verwende ich span-Tags, um die Teile des Textes abzutrennen, die ich beeinflussen möchte - #python und #rstats. Innerhalb jedes Satzes von Span-Tags lege ich einen Stil fest - speziell eine Textfarbe mit color:und dann den Hex-Wert der gewünschten Farbe. Sie können neben Hex-Werten auch verfügbare Farbnamen verwenden .

my_chart +

Labore (

title = "#python und

#rstats: Vergleich von 1.000 zufälligen Tweets "

) +

Thema(

plot.title = element_markdown ()

)

Beachten Sie, dass das Gestalten von Text mit ggtext aus zwei Teilen besteht. Zusätzlich zum Hinzufügen meines Stils zur Überschrift oder zu anderem Text muss ich element_markdown()jedem Plotelement die Farben hinzufügen . Ich habe das im obigen Code in einer theme()Funktion mit gemacht plot.title = element_markdown().

Wenn Sie bis jetzt den gesamten Code ausführen, sollte das Diagramm folgendermaßen aussehen:

Sharon Machlis,

Es fällt mir allerdings etwas schwer, die Farben in diesem Überschriftentext zu erkennen. Fügen wir Tags hinzu, um den Text fett zu machen, und fügen wir hinzu legend.position = none, um die Legende zu entfernen: 

my_chart +

Labore (

title = " #python und

#rstats : Vergleich von 1.000 zufälligen Tweets "

) +

Thema(

plot.title = element_markdown (), legend.position = "none"

)

Sharon Machlis,

If I want to change the color of the x-axis text, I need to add data with that information to the data frame I’m visualizing. In the next code block, I create a column that adds bold italic red to the FiveLikes and FiveRTs category labels and styles the rest as bold italic without adding red. I also increased the size of the font just for FiveLikes and FiveRTs. (I wouldn’t do that on a real graph; I do it here only to make it easier to see the differences between the two.)

graph_data %

mutate(

category_with_color = ifelse(Category %in% c("FiveLikes", "FiveRTs"),

glue::glue("{Category}"),

glue::glue("{Category}"))

)

Next I need to re-create the chart to use the updated data frame. The new chart code is mostly the same as before but with two changes: My x axis is now the new category_with_color column. And, I added element_markdown() to axis.text.x inside the theme() function:

ggplot(graph_data, aes(x=category_with_color, y=NumTweets, fill= Hashtag)) +

geom_col(position="dodge", alpha = 0.9) +

theme_minimal() +

xlab("") +

ylab("") +

theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "grey")) +

scale_fill_manual(values = c("#ff8c00", "#346299")) +

labs(

title = "#python and #rstats: Comparing 1,000 random tweets"

) +

theme(

plot.title = element_markdown(), legend.position = "none",

axis.text.x = element_markdown() # Added element_markdown() to axis.text.x in theme

)

The graph now looks like this, with the first two items on the x axis in red:

Sharon Machlis,

There is more you can do with ggtext, such as creating stylized text boxes and adding images to axes. But package author Claus Wilke warned us at the conference not to go too crazy. The ggtext package doesn’t support all of the formatting commands that are available for R Markdown documents. You can check out the latest at the ggtext website.

For more R tips, head to the Do More With R page at //bit.ly/domorewithR or the Do More With R playlist on the  TECHtalk YouTube channel.