shoorideh
shoorideh

Reputation: 173

Plot including one categorical variable and two numeric variables

How can I show the values of AverageTime and AverageCost for their corresponding type on a graph. The scale of the variables is different since one of them is the average of time and another one is the average of cost. I want to define type as x and y refers to the value of AverageTime and AverageCost. (In this case, I will have two line plots just in one graph)

Type<-c("a","b","c","d","e","f","g","h","i","j","k")
AverageTime<-c(12,14,66,123,14,33,44,55,55,6,66)
AverageCost<-c(100,10000,400,20000,500000,5000,700,800,400000,500,120000)
df<-data.frame(Type,AverageTime,AverageCost)

Upvotes: 0

Views: 3389

Answers (3)

boshek
boshek

Reputation: 4406

This could be done using facet_wrap and scales="free_y" like so:

library(tidyr)
library(dplyr)
library(ggplot2)

df %>%
  mutate(AverageCost=as.numeric(AverageCost), AverageTime=as.numeric(AverageTime)) %>%
  gather(variable, value, -Type) %>%
  ggplot(aes(x=Type, y=value, colour=variable, group=variable)) +
  geom_line() +
  facet_wrap(~variable, scales="free_y")

enter image description here

There you can compare the two lines even though they are different scales.

HTH

Upvotes: 1

MLavoie
MLavoie

Reputation: 9836

To show both lines in the same plot it will be hard since there are on different scales. You also need to convert AverageTime and AverageCost into a numeric variable.

library(ggplot2)
library(reshape2)
library(plyr)

to be able to plot both lines in one graph and take the average of the two, you need to some reshaping.

df_ag <- melt(df, id.vars=c("Type"))
df_ag_sb <- df_ag %>% group_by(Type, variable) %>% summarise(meanx = mean(as.numeric(value), na.rm=TRUE))

ggplot(df_ag_sb, aes(x=Type, y=as.numeric(meanx), color=variable, group=variable)) + geom_line()

enter image description here

Upvotes: 0

Eric Fail
Eric Fail

Reputation: 7928

# install.packages("ggplot2", dependencies = TRUE)
library(ggplot2)
p <- ggplot(df, aes(AverageTime, AverageCost, colour=Type)) + geom_point()
p + geom_abline()

enter image description here

Upvotes: 0

Related Questions