我正在尝试更改ggvis绘图中的刻度标签.我的数据点是x = c(1,2,3)和y = c(1,2,3).但是,以下代码会导致刻度标签完全没有意义!
library(dplyr)
library(ggvis)
data.frame(x = c(1,2,3), y = c(1,2,3) ) %>%
ggvis(~x,~y ) %>%
layer_lines() %>%
add_axis("x", properties=axis_props(
labels=list(angle=90, fontSize = 10, text = c("one","two","three" ) )
)
)
Run Code Online (Sandbox Code Playgroud)
得到:

我想我也必须格式化刻度,或者至少告诉ggvis哪些刻度标记?
您text以错误的方式使用该物业.
ggvis它本身只在R中执行数据绑定和处理.然后将ggvis对象"转换" 为由定义的可视化语法vega.js,该可视化语法构建在d3.js执行实际渲染之上.
因此,add_axis它只是一个ggvis用于定义Axes属性的瘦包装器vega.js.您可以使用此文档找到更多相关信息.
您几乎可以看到传递给add_axis()函数的参数与您指定的JSON规范具有一对一的映射关系vega.js.因此,properties=axis_props(...)在ggvis映射到性能的轴属性(我知道这听起来令人困惑,但点击上面的链接,你会看到那里的层次结构).
在性能参数将定义,我在这里引用文档,
自定义轴样式的可选标记属性定义.输入对象可以包括用于刻度(主要和次要),majorTicks,minorTicks,标签和轴(用于轴线)的子对象.
因此,性能参数只应该变更的造型,其中包括的样式labels,ticks以及axis线.
你的代码:
properties=axis_props(labels=list(angle=90, fontSize = 10,
text = c("one","two","three"))
Run Code Online (Sandbox Code Playgroud)
可以抽象为
properties=axis_props(labels=list(...))
Run Code Online (Sandbox Code Playgroud)
基于我们上面的讨论,它正在操纵轴的样式labels.每个label都只是一个SVG <text>元素,其可调整的属性可以在本文档中找到.并通过修改造型轴标签,你改变造型的所有 x轴标签.
最后,这意味着通过指定text = c("one","two","three"),您最终会手动将每个x轴刻度标签设置为一个数组 ["one", "two", "three"],该数组被连接形成字符串one,two,three.
默认情况下,ggvis将为您确定轴属性,包括
这就是如何在没有指定的情况下add_axis("y", ...)最终得到一个很好的渲染y轴.但您可以通过values在add_axis()函数中指定属性来手动覆盖刻度.
例如,
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)))
Run Code Online (Sandbox Code Playgroud)
这给了我们:

更近,但还没有,因为标签是数字,而不是你想要的字符串.
最后,为了更改标签,我们可以简单地将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)))
Run Code Online (Sandbox Code Playgroud)
哪个会给你 