我想在同一个图表中绘制4条销售线,每条线显示这种类型的magasin的销售额:a,b,c和d。
dataa<-data[which(StoreType=="a"),]
datab<-data[which(StoreType=="b"),]
datac<-data[which(StoreType=="c"),]
datad<-data[which(StoreType=="d"),]
例如:
datac
Date StoreType V1
1: janvier_2013 c 26498298
2: février_2013 c 24151938
3: mars_2013 c 26881214
4: avril_2013 c 25097237
5: mai_2013 c 26713190
6: juin_2013 c 26145149
然后我创建了水平轴,即日期轴:
Date<-unique(as.factor(data$Date))
unique(data$Date)
[1] "janvier_2013 " "février_2013 " "mars_2013 " "avril_2013 " "mai_2013 " "juin_2013 " "juillet_2013 "
[8] "août_2013 " "septembre_2013" "octobre_2013 " "novembre_2013 " "décembre_2013 " "janvier_2014 " "février_2014 "
[15] "mars_2014 " "avril_2014 " "mai_2014 " "juin_2014 " "juillet_2014 " "août_2014 " "septembre_2014"
[22] "octobre_2014 " "novembre_2014 " "décembre_2014 " "janvier_2015 " "février_2015 " "mars_2015 " "avril_2015 "
[29] "mai_2015 " "juin_2015 " "juillet_2015 "
然后我创建包含31行的日期框架:
Data2<-data.frame(Date,dataa,datab,datac,datad)
最后,我使用此代码绘制图形,并且没有任何错误,它工作正常:
ibrary(dplyr)
library(plotly)
p <- plot_ly(Data2, x = ~Date, y = ~dataa, name = 'Sales magazin a', type = 'scatter', mode = 'lines',
line = list(color = 'rgb(205, 12, 24)', width = 4)) %>%
add_trace(y = ~datab, name = 'Sales magazin b', line = list(color = 'rgb(22, 96, 167)', width = 4)) %>%
add_trace(y = ~datac, name = 'Sales magazin c', line = list(color = 'rgb(205, 12, 24)', width = 4, dash = 'dash')) %>%
add_trace(y = ~datad, name = 'Sales magazin d', line = list(color = 'rgb(22, 96, 167)', width = 4, dash = 'dash')) %>%
layout(title = "Somme des ventes pour chaque magazin",
xaxis = list(title = "Months_year"),
yaxis = list (title = "Sales"))
p
但是我得到了这个空图:
你如何解释和解决这个问题?
答案 0 :(得分:1)
您的数据框由多个数据框组成。例如,请查看str(dataa)
。对于绘图,您需要引用列(~ Date
),而不是数据帧(~dataa
)。
您应该以某种方式重新组织数据,以便每个商店的数据都在一列中。在不更改代码的情况下,您可以对所有子集执行以下操作,然后按照以下步骤操作:
dataa<-data[which(StoreType=="a"),V1]
...
但是,如果不是每个组都按月正确排序,则使用data.frame
加入一组子集可能会导致错误。一个整洁的方法将有助于确保每个商店的日期正确对齐:
library(tidyr)
library(dplyr)
Data2 <- data %>%
mutate(StoreType = paste0("data", StoreType)) %>%
spread(key = StoreType, value = V1)
然后在plot_ly
的{{1}}版本上使用Data2
功能。