Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plotting using decimals and representing tooltip labels in percentage

I wish to plot the line chart using ggplotly and represent the numbers in percentage. So the ggplot command before or represents the figures in percentages and after or in decimals. The plots appear to be different. How can I make the plot using decimals and represent the tool tip labels in percentages?

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

or

 # 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
like image 627
AK94 Avatar asked Aug 07 '17 06:08

AK94


1 Answers

Here is a solution for your 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

A more flexible solution is:

# 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

like image 111
Marco Sandri Avatar answered Oct 18 '22 20:10

Marco Sandri