我有以下数据:
myData <- data.frame(FISCAL_YEAR_WEEK = c('2016-09','2016-09','2016-09','2016-09','2016-09','2016-10','2016-10','2016-10','2016-10','2016-10','2016-10','2016-10','2016-10','2016-11','2016-11','2016-11','2016-11','2016-12','2016-12','2016-12','2016-12','2016-12','2016-12','2016-14','2016-14','2016-14','2016-14'),
MOTOR_VEND_ID = c('7','E','F','F','M','7','9','E','E','F','F','M','R','7','E','F','F','E','E','F','F','M','M','7','E','F','M'),HGA_SUPPLIER=c('RHO','RHO','HWY','RHO','RHO','RHO','RHO','HWY','RHO','HWY','RHO','RHO','RHO','RHO','RHO','HWY','RHO','HWY','RHO','HWY','RHO','HWY','RHO','RHO','RHO','RHO','RHO'),
RTPAD_TOT = c(0,0,0,0,0,0,420,6,0,0,0,20,1,76,0,0,0,76,62,0,0,0,0,6,1,1,0))
我希望RTPAD_TOT
对FISCAL_YEAR_WEEK
有一个折线图,并按其他可用字符进行分组。 FISCAL_YEAR_WEEK
表示会计年度的会计周。 2016-11意味着2016财年的第11周。这是我的阴谋代码:
ax <- list(
type = "category",
showgrid = TRUE,
showline = TRUE,
autorange = TRUE,
showticklabels = TRUE,
ticks = "outside",
tickangle = 0
)
ay <- list(
range = c(0,300),
dtick = 50,
showgrid = TRUE,
showline = TRUE,
autorange = FALSE,
showticklabels = TRUE,
ticks = "outside",
tickangle = 0
)
plot_ly(myData,
x = FISCAL_YEAR_WEEK,
y = RTPAD_TOT,
type = 'scatter',
mode = 'markers+lines',
color = interaction(MOTOR_VEND_ID,HGA_SUPPLIER)) %>%
layout(xaxis = ax, yaxis = ay)
显然,我希望2016-09在2016-10之前出现在图表中。但是我在x轴上的FISCAL_YEAR_WEEK
都是混乱的。
使用ggplot2
构建相同的图不会混淆我的x轴:
ggplot(data = myData,
aes(x = FISCAL_YEAR_WEEK,
y = RTPAD_TOT,
group = interaction(MOTOR_VEND_ID, HGA_SUPPLIER)))) +
geom_line()
从上面的代码开始,我的轴的外观一直都很好......
ggplotly()
我想将我的ggplot转换成情节。在ggplotly()
命令之后,我的x轴将再次混乱。
我的x轴需要type = "category"
选项,因为我只想查看数据中的日期。此外,故意将2016 - 09年错误解释为2016年9月而不是2016年的第9个财周。我正在构建一个闪亮的应用程序,用户可以将我的x轴更改为不仅是日期时间变量,而是其他变量同样。有时,它可能是序列号,如001,002,120。因此将数字/日期时间设置为没有意义,因为这将在002和120之间产生巨大差距。
因此,此处需要type = "category"
选项。
我也尝试将FISCAL_YEAR_WEEK
分解,但它不起作用:
myData$FISCAL_YEAR_WEEK <- factor(myData$FISCAL_YEAR_WEEK,levels=sort(unique(myData$FISCAL_YEAR_WEEK)))
我的x轴仍然会在情节中混乱
答案 0 :(得分:10)
直到最近,对plot.ly分类轴进行排序的唯一方法是对图表的第一个分类轨迹的数据进行排序(参考:Etienne对plot.ly community site的回答)。
That's changed,您可以通过以下任一方式设置categoryorder
来实现所需的分类轴排序:
ax <- list(
type = "category",
categoryorder = "category ascending",
showgrid = TRUE,
showline = TRUE,
autorange = TRUE,
showticklabels = TRUE,
ticks = "outside",
tickangle = 0
)
或者:
ax <- list(
type = "category",
categoryorder = "array",
categoryarray = sort(unique(myData$FISCAL_YEAR_WEEK)),
showgrid = TRUE,
showline = TRUE,
autorange = TRUE,
showticklabels = TRUE,
ticks = "outside",
tickangle = 0
)
有关plot.ly的分类轴排序的更多信息,请参阅他们的reference doc。