绘图包括一个分类变量和两个数字变量

时间:2016-01-11 22:31:48

标签: r algorithm

如何在图表上显示其对应类型的AverageTime和AverageCost的值。变量的规模是不同的,因为其中一个是时间的平均值,另一个是成本的平均值。我想将类型定义为x,y指的是AverageTime和AverageCost的值。 (在这种情况下,我将在一个图表中有两个线图)

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)

3 个答案:

答案 0 :(得分:1)

可以使用facet_wrapscales="free_y"完成此操作:

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

在那里你可以比较两条线,即使它们是不同的尺度。

HTH

答案 1 :(得分:0)

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

enter image description here

答案 2 :(得分:0)

要在同一个图中显示两条线,由于存在不同的比例,因此很难。您还需要将AverageTime和AverageCost转换为数字变量。

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

能够在一个图表中绘制两条线并取两者的平均值,需要进行一些重塑。

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