如何使用ggvis标记绘图刻度线

Ale*_*lex 4 r ggvis

我正在尝试更改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哪些刻度标记?

Xin*_*Yin 8

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轴.但您可以通过valuesadd_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)

哪个会给你 在此输入图像描述