首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当轴类型为范畴时,不能重新排列x轴。

当轴类型为范畴时,不能重新排列x轴。
EN

Stack Overflow用户
提问于 2016-06-11 17:20:48
回答 1查看 6.8K关注 0票数 7

我有以下数据:

代码语言:javascript
复制
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周。下面是我的巧妙代码:

代码语言:javascript
复制
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轴:

代码语言:javascript
复制
ggplot(data = myData, 
       aes(x = FISCAL_YEAR_WEEK, 
           y = RTPAD_TOT, 
           group = interaction(MOTOR_VEND_ID, HGA_SUPPLIER)))) +
  geom_line()

从上面的代码看,我的轴的外观会很好,直到.

代码语言:javascript
复制
ggplotly()

我想巧妙地把我的图形转换成。在ggplotly()命令之后,我的x轴将再次混乱。

我需要x轴中的type = "category"选项,因为我只想看到数据中的日期。此外,2016-09将被曲解为2016年9月,而不是2016年的第9财政周。我正在构建一个闪亮的应用程序,在这个应用程序中,用户可以将我的x轴更改为不仅是datetime变量,还可以是其他变量。有时,它可能是像001,002,120这样的序列号。因此,使其成为数字/日期时间是没有意义的,因为这将在002和120之间造成巨大的差距。所以这里需要type = "category"选项。

我也尝试过分解FISCAL_YEAR_WEEK,但它不起作用:

代码语言:javascript
复制
myData$FISCAL_YEAR_WEEK <- factor(myData$FISCAL_YEAR_WEEK,levels=sort(unique(myData$FISCAL_YEAR_WEEK)))

我的x轴仍会被巧妙地弄乱。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 19:41:28

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

一切都变了,您可以通过以下列任何一种方式设置categoryorder来实现所需的分类轴排序:

代码语言:javascript
复制
ax <- list(
  type = "category",
  categoryorder = "category ascending",
  showgrid = TRUE,
  showline = TRUE,
  autorange = TRUE,
  showticklabels = TRUE,
  ticks = "outside",
  tickangle = 0
)

或者:

代码语言:javascript
复制
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的分类轴的更多信息,请参见它们的参考文档

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37766546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档