【问题标题】:ggvis - custom non-numeric y-axis labels showing as 'NaN'ggvis - 显示为“NaN”的自定义非数字 y 轴标签
【发布时间】:2016-08-18 19:58:55
【问题描述】:

编辑:示例代码更新为更复杂的示例

我有一个数据框,其中包含 (x, y) 值和每对的名称,我将其绘制在 ggvis 散点图中。 SO 用户已经将我指向这篇文章 (How do I label plot tick marks using ggvis),我更新了我的代码以反映我在那里看到的内容,方法是使用 factor() 创建自定义 y 轴标签列表ylabels_,该列表被馈送到values =add_axis() 声明。这是新代码:

library(stringi)
require(ggvis)

set.seed(13)
df <- data.frame(x = 1:15, 
                 y = c(rep.int(1, 15), 
                       rep.int(4, 15), 
                       rep.int(7, 15)))

ylabels_ <- factor(c(1,4,7), labels = stri_rand_strings(3, 7))

df %>%
  ggvis(~x, ~y) %>% 
  add_axis("y", values = ylabels_)

我的轴标签仍然返回 NaN 而不是因子。我错过了什么吗?

解决方案编辑:这是我终于开始工作的代码。请注意,我将 x 值更改为交错排列,以便区分三行。

library(stringi)
require(ggvis)

set.seed(13)
df <- data.frame(x = c(seq(1, length.out = 15, by = 3),
                       seq(2, length.out = 15, by = 3),
                       seq(3, length.out = 15, by = 3)),
                 y = factor(c(rep.int(1, 15), 
                       rep.int(4, 15), 
                       rep.int(7, 15)), labels = c("one", "four", "seven"),
                       ordered = T))

df %>%
  ggvis(~x, ~y) %>% 
  layer_points() %>%
  scale_ordinal("y", domain = c("seven", "four", "one")

我不明白为什么在domain = 部分我必须颠倒因素的顺序才能以正确的顺序显示。如果有人对此有任何见解,那将非常有帮助!

【问题讨论】:

    标签: r ggvis


    【解决方案1】:

    请注意,在链接的答案中,新的因子变量用作y 变量。您也可以将它用于您的values,但不是必须的。

    根据y 制作新因子,但使用name 作为标签是为了以正确的顺序获取name 变量以进行绘图。

    df$ylabels_ <- factor(df$y, labels = stri_rand_strings(3, 7))
    

    因为您现在在 y 轴上使用因子变量,所以需要显式使用 layer_points

    df %>%
        ggvis(~x, ~ylabels_) %>% 
        layer_points()  
    

    请注意,只有当原始 y 数据是整数时,整个方法才有效。

    【讨论】:

    • 我觉得我给出的例子太简单了——我要发布一个修改过的例子
    • @JonathanH 如果问题是重复 y 值,请将新变量放入数据集中,而不是制作独立向量。但根据我关于连续变量的说明,该因素将导致相等的间距而不是“连续”间距。
    • 我最终对代码进行了更多修改,但您的回答帮助我到达了我需要的地方!
    【解决方案2】:

    称我为傻瓜,但我称这是一个错误(顺便说一句,它没有回答你的问题):

    ## set up data
    lab <- factor(1:15, labels=stri_rand_strings(15, 7))
    val <- 1:15
    
    ## all works according to expectations on the "x" axis
    data.frame(xx=lab, yy=val) %>%
        ggvis(~xx, ~yy) %>% 
        layer_points() %>%
        add_axis("x", values=lab,
                 properties=axis_props(labels=list(angle=90, fontSize = 10)))
    
    ## nothing works according to expectations on the "y" axis
    ## attempt 1
    data.frame(xx=val, yy=lab) %>%
        ggvis(~xx, ~yy) %>% 
        layer_points() %>%
        add_axis("y", values=lab,
                 properties=axis_props(labels=list(angle= 0, fontSize = 10)))
    
    ## attempt 2
    data.frame(xx=val, yy=as.numeric(val)) %>%
        ggvis(~xx, ~yy) %>% 
        layer_points() %>%
        add_axis("y", values=lab,
                 properties=axis_props(labels=list(angle= 0, fontSize = 10)))
    

    【讨论】:

    • 不太确定你描述的问题是什么,但我发现对我有用的解决方案在上面
    猜你喜欢
    • 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
    相关资源
    最近更新 更多