ggvis - 显示为 'NaN' 的自定义非数字 y 轴标签
ggvis - custom non-numeric y-axis labels showing as 'NaN'
编辑: 使用更复杂的示例更新示例代码
我有一个包含 (x, y) 值和每对名称的数据框,我正在将其绘制在 ggvis 散点图中。所以用户已经将我指向这个 post (How do I label plot tick marks using ggvis) 并且我更新了我的代码以反映我在那里看到的内容,方法是使用 factor()
创建自定义 y 轴标签列表 ylabels_
被馈送到 add_axis()
语句下的 values =
。这是新代码:
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 =
部分我必须颠倒因素的顺序才能以正确的顺序显示。如果有人对此有任何见解,那将非常有帮助!
叫我傻瓜,但我称这是一个错误(顺便说一句,它没有回答你的问题):
## 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)))
请注意,在链接的答案中,新因子变量用作 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
数据是整数时,整个方法才有效。
编辑: 使用更复杂的示例更新示例代码
我有一个包含 (x, y) 值和每对名称的数据框,我正在将其绘制在 ggvis 散点图中。所以用户已经将我指向这个 post (How do I label plot tick marks using ggvis) 并且我更新了我的代码以反映我在那里看到的内容,方法是使用 factor()
创建自定义 y 轴标签列表 ylabels_
被馈送到 add_axis()
语句下的 values =
。这是新代码:
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 =
部分我必须颠倒因素的顺序才能以正确的顺序显示。如果有人对此有任何见解,那将非常有帮助!
叫我傻瓜,但我称这是一个错误(顺便说一句,它没有回答你的问题):
## 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)))
请注意,在链接的答案中,新因子变量用作 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
数据是整数时,整个方法才有效。