我对这个问题进行了相当多的研究并且如果我错过了答案而道歉,但我似乎无法找到特定于我的情景的答案。我想创建2个图表(对于每个级别的帐户:Dr和Cr),其中6个框图基于三列中的数据。数据类似于以下数据(假设有六个日期; 01/01 / 2016-06 / 01/2016):
Date Days Acct
01/01/16 7 Cr
01/01/16 5 Dr
02/01/16 6 Cr
01/01/16 4 Dr
02/01/16 6 Dr
让我们假设只有6个唯一的日期值和两个帐户值的1000行--Cr和我将解释我为获取图表所做的工作,但我知道它不是最有效的方式,因为我现在正在使用for循环。
我将Cr数据分配给一个数据帧,然后将Dr数据分配给另一个数据帧。然后,我将每个数据框中的唯一Date值分配给新数据帧。之后,我运行For循环为每个Date值创建一个数据框,并为每个Date值分配Day值,如下所示:
01/01/2016 (Data Frame 1, col A)
5
7
6
02/01/2016 (Data Frame 2, col A)
3
5
然后我运行一个cbind.fill将所有数据框组合成一个有6列的数据框,其中Date是标题,Days是行中的值。我在该数据框上运行了一个箱线图。
感谢您的帮助!
答案 0 :(得分:1)
好的,所以我希望我正确地解释你的问题。你想要两个图表(每个Acct级别1个),每个图表应该有六个箱图(每个日期一个盒子)。由于您的数据集不够大而无法用作示例,因此我创建了自己的数据集,并展示如何使用ggplot2
和基础R
制作箱图。
library(ggplot2)
set.seed(123)
date_vec = seq(as.Date('2016/1/1'), as.Date('2016/1/6'), by = 'day')
df = data.frame(
Date = sample(date_vec, 1000, replace = T),
Days = rpois(1000, lambda = 2),
Acct = sample(c('Dr','Cr'), 1000, replace = T),
stringsAsFactors = FALSE
)
Date Days Acct
1 2016-01-02 1 Dr
2 2016-01-05 2 Dr
3 2016-01-03 1 Dr
4 2016-01-06 3 Cr
5 2016-01-06 3 Dr
6 2016-01-01 2 Cr
您可以ggplot2
使用facet_wrap
和Acct
:
ggplot(df, aes(x = factor(Date), y = Days))+
geom_boxplot()+facet_wrap(~Acct)+theme_bw()+
xlab('Date')
或者,我们可以在基座R
中制作两个面板箱图:
par(mfrow = c(1,2)) #plot both simultaneously
with(subset(df, Acct == 'Cr'),
boxplot(Days~Date, main = 'Cr Boxplots'))
with(subset(df, Acct == 'Dr'),
boxplot(Days~Date, main = 'Dr Boxplots'))
显然,您需要使用x轴标签来获得更丰富的图表。我希望这会有所帮助。