基于数值变量

时间:2018-01-03 16:54:12

标签: r plotly

我需要使用数字变量对x轴分类变量进行重新排序,以便在R中以图形方式简化绘图。

这是一些虚拟数据:

   agg = structure(list(catvar = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i", "j", "k", "l", "m", "n", "o"), v1 = c(1.1, 1.3, 1, 
0.8, 1.2, 1.4, 0.7, 2.5, 0.9, 2.5, 1.7, 0.9, 1.7, 1.1, 0.9), 
    v2 = c(0.1, 0.1, 0.1, 0, 0.1, 0.1, 0, 0.2, 0, 0.2, 0.1, 0.1, 
    0.1, 0.1, 0.1), v3 = c(7.3, 8.2, 6.4, 6, 7.5, 8.4, 5.8, 12.4, 
    6.4, 13.1, 9.3, 6.2, 9.4, 7.1, 6.3)), .Names = c("catvar", 
"v1", "v2", "v3"), class = "data.frame", row.names = c(NA, -15L
))

以下是我一直在尝试的内容。最近似乎添加了一个新功能来处理这个问题,但它无法正常工作。

# the reordering is handled here:
ax <- list(
  type = "category",
  categoryorder = "array",
  categoryarray = agg$catvar[order(agg[['v1']])],
  showgrid = TRUE,
  showticklabels = TRUE
)

p <- plot_ly(agg, x =~catvar, 
             y =~v2, name = 'v2',
             type = 'scatter', mode = 'lines') %>%
  add_trace(y =~v1, name = 'v1') %>%
  add_trace(y =~v3, name = 'v3') %>%
  layout(
    xaxis = ax,
    hovermode = 'x+y')

p

我需要的是根据data.frame中的任何数字变量重新排序x轴(catvar),它们是v1,v2,v3。

1 个答案:

答案 0 :(得分:1)

您需要在代码中添加一个命令,用于根据v1重新排序数据集。

agg2 <- agg[order(agg[['v1']]),]

p <- plot_ly(agg2, x =~catvar, 
             y =~v2, name = 'v2',
             type = 'scatter', mode = 'points') %>%
  add_trace(y =~v1, name = 'v1') %>%
  add_trace(y =~v3, name = 'v3') %>%
  layout(
    xaxis = ax,
    hovermode = 'x+y')
p

enter image description here