【问题标题】:R Plotly: Cannot re-arrange x-axis when axis type is categoryR Plotly:当轴类型为类别时无法重新排列x轴
【发布时间】:2016-06-11 17:20:48
【问题描述】:

我有以下数据:

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

但是,这会导致我的 x 轴没有按顺序排列:

显然,我希望 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 个财政周。我正在构建一个闪亮的应用程序,用户可以将我的 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 轴还是会乱七八糟

【问题讨论】:

  • 他的示例代码是否有其他人收到错误提示,说托盘中没有足够的颜色?

标签: r plot ggplot2 plotly


【解决方案1】:

直到最近,对 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

【讨论】:

  • 我不知道为什么,但只有第二个选项对我有用
  • 谢谢!这正是我所需要的(categoryorder = "category ascending")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多