2017-09-14 1 views
1

Neugierig, wie dieser Punktplot mit ggplot oder plotly Bibliothek Funktionen plotten. Beschriften Sie auch die MPG-Werte auf einzelnen Punkten.ggplot Version von dotplot

# Dotplot: Grouped Sorted and Colored 
# Sort by mpg, group and color by cylinder 
x <- mtcars[order(mtcars$mpg),] # sort by mpg 
x$cyl <- factor(x$cyl) # it must be a factor 
x$color[x$cyl==4] <- "red" 
x$color[x$cyl==6] <- "blue" 
x$color[x$cyl==8] <- "darkgreen"  
dotchart(x$mpg,labels=row.names(x),cex=.7,groups= x$cyl, 
     main="Gas Milage for Car Models\ngrouped by cylinder", 
     xlab="Miles Per Gallon", gcolor="black", color=x$color) 

enter image description here

+0

Seite beachten, könnten Sie tun, nur 'c ("rot", "blau",“ dunkelgrün ") [x $ cyl]' für dein 'color =' Argument zu 'dotchart' – thelatemail

+0

@thelatemail, guter Punkt, einverstanden, ich spiele mit verschiedenen Parametern wie Liniengröße, Farben usw .. –

Antwort

3

Mit einer schnellen Säuberung der rownames eine Spalte sein Sie Folgendes tun können.

Wir haben factor() für die Ästhetik für Farbe, so dass es diskrete/ wird, wenn diese Sie "free_y" für scale und space angeben aussehen Facettierung acheive benötigen.

Basis

library(tidyverse) 
mtcars2 = rownames_to_column(mtcars, "car") 
ggplot(mtcars2, aes(x = mpg, y = factor(car), color = factor(cyl))) + 
    geom_point(shape = 1) + 
    facet_grid(cyl ~ ., scales = "free_y", space = "free_y") + 
    theme_bw() + 
    theme(panel.grid = element_blank(), 
     panel.grid.major.y = element_line(size=.1, color="grey90"), 
     legend.position = "none") + 
    ggtitle("Gas Milage for Car Models\ngrouped by cylinder") + 
    xlab("Miles Per Gallon") + 
    ylab("") 

enter image description here


Hinzufügen von Text

ggplot(mtcars2, aes(x = mpg, y = factor(car), color = factor(cyl))) + 
    geom_point(shape = 1) + 
    geom_text(aes(label = mpg), colour = "grey40", size = 3, hjust = -0.3) + 
    facet_grid(cyl ~ ., scales = "free_y", space = "free_y") + 
    theme_bw() + 
    theme(panel.grid = element_blank(), 
     panel.grid.major.y = element_line(size=.1, color="grey90"), 
     legend.position = "none") + 
    ggtitle("Gas Milage for Car Models\ngrouped by cylinder") + 
    xlab("Miles Per Gallon") + 
    ylab("") 

enter image description here

können Sie wahrscheinlichverwendenstatt aber geom_text funktioniert super hier.

+0

wie füge ich hinzu die tatsächlichen mpg-Werte oben auf jedem der Punkte. Gerade jetzt ist es nur ein Kreis. Es wäre schön, die tatsächlichen Werte auf dem Punkt selbst zu zeigen. –

+0

ive hat eine Version mit dem Text rechts neben jedem Punkt hinzugefügt, so dass jeder Punkt sichtbar ist – zacdav

4

Ändern @ zacdav Antwort leicht die Punkte innerhalb jeder Gruppe forcats mit bestellen:

library(tidyverse) 
library(forcats) 
mtcars2 = rownames_to_column(mtcars, "car") %>% 
    mutate(car_ordered = fct_reorder2(car, cyl, mpg, .desc = FALSE)) 

ggplot(mtcars2, aes(x = mpg, y = car_ordered, color = factor(cyl))) + 
    geom_point(shape = 1) + 
    geom_text(aes(label = mpg), colour = "grey40", size = 3, hjust = -0.3) + 
    facet_grid(cyl ~ ., scales = "free_y", space = "free_y") + 
    theme_bw() + 
    theme(panel.grid = element_blank(), 
      panel.grid.major.y = element_line(size=.1, color="grey90"), 
      legend.position = "none") + 
    ggtitle("Gas Milage for Car Models\ngrouped by cylinder") + 
    xlab("Miles Per Gallon") + 
    ylab("") 

enter image description here