我试图在X轴上绘制Date
,在Y轴上绘制Revenue
。我有大约16000个客户的数据,每周汇总收入。数据集看起来像下面的示例数据集(除了我有大约100周的数据和16000个客户):
CustNum Date Revenue
1 2013-01-07 35
1 2013-01-14 23
1 2013-01-21 42
1 2013-01-28 65
2 2013-01-07 78
2 2013-01-14 48
2 2013-01-21 85
2 2013-01-28 34
我想将这些数据绘制在单个图上,图中的一行代表一个客户。换句话说,该图上将有超过16000行,每周为每个客户显示Revenue
。
现在,我知道这个情节会非常混乱,上面有16000行,我想有什么建议可以更好地绘制这些数据,这样就不会那么杂乱。
我尝试了以下代码,但没有给出我想要的结果:
p <- ggplot() + geom_line(data=res,aes(x=Date,y=Revenue,color=custnum))
这并没有为多个客户提供多条线路。
所以我基本上有两个问题:
什么是表示此数据的更好方法?
我们如何改进我的代码以在一个图上显示16000行? (如果我能用另一种方式来表示这些数据,我不会太在意这个问题)
对此的任何帮助将不胜感激。
答案 0 :(得分:1)
以上是我上述评论中方法的基本R轮廓。我用一个大矩阵来保存所有数据。第一栏是客户是否得到了治疗。随后的列是100周的每周收入。
首先,我将模拟一些数据,这会产生很多时间噪音。
#First records are a stable pattern
notreat<- matrix(c(rep(0,8000), 100+rnorm(8000*100,0,5)),nrow=8000)
#second set of records get no treatment for 50 weeks
treat<- matrix(c(rep(1,8000), 100+rnorm(8000*50,0,5)),nrow=8000)
#then get the treatment for 50 weeks
treat<-cbind(treat,
matrix(rnorm(50*8000,100+0.75*(0:50)),nrow=8000,ncol=50,byrow=TRUE))
m <- rbind(notreat, treat)
#use a color palette with transparency to be able to discern the overall pattern.
palette ( c(rgb(.4,0,0,0.01),rgb(0,0,0.4,0.01)))
#This will take several seconds to render 16000 lines
matplot(t(m[,2:101]),col=1+m[,1],type="l")
您可以使用unstack()
或reshape
包等内容将数据框放入我构建的矩阵类型中。
答案 1 :(得分:0)
你可能正在看这样的事情:
CustNum = c("1","1","1","1",
"2","2","2","2")
Date = c("2013-01-07","2013-01-14","2013-01-21","2013-01-28",
"2013-01-07","2013-01-14","2013-01-21","2013-01-28")
Revenue = c("35","23","42","65","78","48","85","34")
df = as.data.frame(cbind(CustNum,Date,Revenue))
df$CustNum = as.factor(df$CustNum)
df$Revenue = as.numeric(as.character(df$Revenue))
## create the factor variable
df$Treatment = ifelse(df$CustNum == '1','campaign','no campaign')
ggplot(df) + geom_point(aes(x=Date, y=Revenue, color=Treatment), size=5) + facet_wrap(~Treatment)
结果:
现在,您可以想象在所有数据点中使用geom_point
或geom_boxplot
切换geom_errorbar
时也是如此。您也可以选择不进行分面,只需在一个图表中进行绘图,但您必须在geom调用中指定选项'闪避',以避免让您将盒子图堆叠在一起。
结果2: