我对R很陌生,无法找到解决问题的方法。我想问题很简单。我有4个变量的df:日期,SKU_code,SKU_category和sales_amount。我想创建一个for循环以绘制n个数字,其中n等于SKU_category的数量。换句话说,这是我要在for循环中转换的代码。它有效,但是我有50多个类别,因此效率不高:
LiveData
我尝试过,但是没用
dfsales_red_cat <- dfsales %>% group_by(date, SKU_code, SKU_category) %>% summarize(y=sum(sales_amount))
dfsales_red_C01 <- dfsales_red_cat %>% filter(SKU_category =="C01")
dfsales_red_C01 <- dfsales_red_C01[,c(1,2,4)]
ggplot(dfsales_red_C01,aes(x=date,y=y,colour=SKU_code,group=SKU_code)) + theme(legend.position="none") + geom_line()+labs(title="C01", y='Sales',x='Year')
dfsales_red_C02 <- dfsales_red_cat %>% filter(SKU_category =="C02")
dfsales_red_C02 <- dfsales_red_C02[,c(1,2,4)]
ggplot(dfsales_red_C02,aes(x=date,y=y,colour=SKU_code,group=SKU_code)) + theme(legend.position="none") + geom_line()+labs(title="C02", y='Sales',x='Year')
...and so on...
谢谢您的帮助。
这是原始表dfsales_red_cat(> 10000行)的一部分,格式为日期,字符,字符,数字:
dfsales_red_cat <- dfsales %>% group_by(date, SKU_code, SKU_category) %>% summarize(y=sum(sales_amount))
cat <- unique(dfsales_red_cat$SKU_category)
for (i in cat) {
dfsales_red_i <- dfsales_red_cat %>% filter(SKU_category==i)
dfsales_red_i <- dfsales_red_i[,c(1,2,4)]
ggplot(dfsales_red_i,aes(x=date,y=y,colour=SKU_code,group=SKU_code)) + theme(legend.position="none") + geom_line()+
labs(title=i, y='Sales',x='Year')
}
答案 0 :(得分:0)
您需要print
,将其存储在列表中和print
或仅进行facet_wrap。首先获得类似您的数据的信息:
sample_dates=seq(as.Date("2016-01-03"),as.Date("2016-12-03"),length.out=50)
df = expand.grid(
date = sample_dates,
SKU_code = c("Z0003","Z0005","Z0006"),
SKU_category = c("C13","C10")
)
df$date = as.Date(df$date)
df$sales_amount = runif(nrow(df))
cat <- unique(df$SKU_category)
print
:
for (i in cat) {
df_i <- subset(df,SKU_category==i)
g = ggplot(df_i,aes(x=date,y=sales_amount,colour=SKU_code,group=SKU_code)) +
theme(legend.position="none") + geom_line()+
labs(title=i, y='Sales',x='Year')
print(g)
}
存储在列表中
plts = lapply(cat,function(i){
g = ggplot(df_i,aes(x=date,y=sales_amount,colour=SKU_code,group=SKU_code)) +
theme(legend.position="none") + geom_line()+
labs(title=i, y='Sales',x='Year')
return(g)
})
plts[[1]]
或者:
ggplot(df,aes(x=date,y=sales_amount,colour=SKU_code,group=SKU_code)) +
theme(legend.position="none") + geom_line()+
labs(y='Sales',x='Year')+
facet_wrap(~SKU_category)