2017-08-07 3 views
2

Ich möchte das Liniendiagramm mit ggplotly plotten und die Zahlen in Prozent darstellen. So stellt der ggplot Befehl vor oder die Zahlen in Prozent und nach oder in Dezimalzahlen dar. Die Plots scheinen anders zu sein. Wie kann ich den Plot mit Dezimalzahlen erstellen und die QuickInfo-Beschriftungen in Prozent angeben?Plotten mit Dezimalzahlen und Darstellung von Tooltip-Etiketten in Prozent

library(plotly) 
library(ggplot2) 
library(devtools) 
library(proto) 
library(RColorBrewer) 
library(gapminder) 
library(stringr) 
library(broom) 
library(mnormt) 

dat1 <- data.frame(
sex = factor(c("Female","Female","Male","Male")), 
time = factor(c("Lunch","Dinner","Lunch","Dinner"), 
levels=c("Lunch","Dinner")), 
total_bill = c(13.53, 16.81, 16.24, 17.42) 
total_bill_pr = sprintf("%.0f%%", 100 * total_bill) 
) 

# Map sex to different point shape, and use larger points 
p <- ggplot(data=dat1, aes(x=time, y=total_bill_pr, group=sex, shape=sex)) + 
geom_line() + 
geom_point() 

p <- ggplotly(p) 
p 

oder

# Map sex to different point shape, and use larger points 
p <- ggplot(data=dat1, aes(x=time, y=total_bill, group=sex, shape=sex)) + 
geom_line() + 
geom_point() 

p <- ggplotly(p) 
p 
+0

'total_bill_pr' ist ein Faktor, nicht eine numerische Variable! Deshalb erhalten Sie zwei verschiedene Plots. –

+0

Vielen Dank Marco für die Antwort, ich würde sehr schätzen, wenn Sie diesen Code korrigieren können, wie ich es versucht habe, aber ich bin nicht in der Lage, es zu bekommen. Die total_bill_pr ist eine Zeichentypvariable, die ich mit str (total_bill_pr) sehe. – AK94

Antwort

0

Hier ist eine Lösung für Ihr Problem:

library(plotly) 
library(ggplot2) 

total_bill = c(13.53, 16.81, 16.24, 17.42) 
dat1 <- data.frame(
sex = factor(c("Female","Female","Male","Male")), 
time = factor(c("Lunch","Dinner","Lunch","Dinner"), levels=c("Lunch","Dinner")), 
total_bill_no_pr = total_bill, 
total_bill = sprintf("%.2f%%", total_bill) 
) 

# Use an additional "label" aesthetic 
p <- ggplot(data=dat1, aes(x=time, y=total_bill_no_pr, 
      group=sex, shape=sex, label=total_bill)) + 
    geom_line() + geom_point() + ylab("Total bill") + xlab("Time") 

# Specify which aesthetic mappings to show in the tooltip 
p <- ggplotly(p, tooltip = c("x", "label", "group")) 
p 

enter image description here

Eine flexiblere Lösung ist:

# Use an additional "text" aesthetic 
p <- ggplot(data=dat1, aes(x=time, y=total_bill_no_pr, group=sex, shape=sex, 
      text=paste("Time:",time,"<br />Total bill:",total_bill,"<br />Sex:",sex))) + 
    geom_line() + geom_point() + ylab("Total bill") + xlab("Time") 

# Specify to show only the "text" aesthetic in the tooltip 
p <- ggplotly(p, tooltip = c("text")) 
p 

enter image description here

+0

Vielen Dank, Kumpel, es ist sehr illustrativ und präzise. – AK94