您以错误的方式使用text 属性。
ggvis 本身仅在 R 中执行数据绑定和处理。然后它将ggvis 对象“翻译”成由vega.js 定义的可视化语法,该语法建立在@987654330 之上@ 执行实际渲染。
所以,add_axis 只是 ggvis 中的一个薄包装器,用于在 vega.js 中定义 Axes 属性。您可以使用 this document 找到更多相关信息。
您几乎可以看到您传递给add_axis() 函数的参数与您在vega.js 中指定的JSON 规范具有一对一的映射关系。
因此,ggvis 中的properties=axis_props(...) 映射到Axis properties 的属性(我知道这可能听起来令人困惑。但是点击上面的链接,您会看到那里的层次结构。
properties参数会定义,我这里引用文档,
自定义轴样式的可选标记属性定义。输入对象可以包括刻度(主要和次要)、majorTicks、minorTicks、标签和轴(用于轴线)的子对象。
因此,properties 参数只应该更改样式,包括labels、ticks 和axis 行的样式。
你的代码:
properties=axis_props(labels=list(angle=90, fontSize = 10,
text = c("one","two","three"))
可以抽象为
properties=axis_props(labels=list(...))
根据我们上面的讨论,它正在操纵轴labels 的样式。
每个label 只是一个SVG <text> 元素,其可调整属性可以是found in this document。通过修改轴标签的样式,您可以更改ALL x 轴标签的样式。
最后,这意味着通过指定text = c("one","two","three"),您最终会手动将每个x轴刻度标签设置为一个数组 ["one", "two", "three"],将其连接起来形成字符串@ 987654348@。
解决方案
默认情况下,ggvis 将为您确定轴属性,包括
这就是在不指定add_axis("y", ...) 的情况下,最终得到一个很好渲染的y 轴的方法。
但是您可以通过在 add_axis() 函数中指定 values 属性来手动覆盖刻度。
例如,
data.frame(x = c(1,2,3), y = c(1,2,3) ) %>%
ggvis(~x,~y ) %>%
layer_lines() %>%
add_axis("x",
value=c(1, 2, 3),
properties=axis_props(
labels=list(angle=90, fontSize = 10)))
这给了我们:
更接近,但还没有,因为标签是数字,而不是你想要的字符串。
最后,为了更改标签,我们可以简单地将 X 轴上的数据从数字更改为因子,例如:
x <- factor(c(1,2,3), labels=c("one", "two", "three"))
data.frame(x = x, y = c(1,2,3) ) %>%
ggvis(~x,~y ) %>%
layer_lines() %>%
add_axis("x", values=x,
properties=axis_props(labels=list(angle=90, fontSize = 10)))
这会给你