R Plotly: 当轴类型为类别时无法重新排列x轴

7

我有以下数据:

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))

我希望有一个折线图,横轴为FISCAL_YEAR_WEEK,纵轴为RTPAD_TOT,可以根据其他变量进行分组。其中FISCAL_YEAR_WEEK表示财年中的财政周,2016-11表示2016财政年度的第11个财政周。下面是我的Plotly代码:

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)

然而,这样会导致我的x轴未按顺序排列:plotly jumbled up my x-axis 显然,我希望图表中的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转换为plotly。在执行ggplotly()命令后,我的x轴会再次混乱。

我需要在我的x轴中使用type = "category"选项,因为我只想看到数据中存在的日期。此外,plotly会误解2016-09为2016年9月而不是2016年第9个财务周。我正在构建一个shiny应用程序,用户可以通过它来更改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轴在plotly中仍然会混乱。

还有其他人用他的示例代码时会出现'调色板中没有足够的颜色'的错误吗? - Hack-R
1个回答

15

最近,排序plot.ly分类轴的唯一方法是对图表的第一个分类跟踪数据进行排序 (参见:Etienne在plot.ly社区网站上的回答)。

现在已经有所改变,您可以通过以下两种方式之一设置 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的分类轴排序更多内容,请查看他们的参考文档


我不确定为什么,但只有第二个选项适用于我。 - Jonathan Hill
1
谢谢!这正是我所需要的(categoryorder =“按类别升序”) - David Valenzuela Urrutia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接