【问题标题】:ggvis: add size property to a lineggvis:将大小属性添加到一行
【发布时间】:2014-03-22 19:34:53
【问题描述】:

刚刚开始使用ggvis。恐怕不是一个特别有趣或普遍的问题,但对我来说如何将size 属性添加到一行并不明显。特别是,我将如何使用ggvis 复制以下情节?

library(ggplot2)

df <- data.frame(
  id = c(1,1,1,2,2,2,2),
  x  = c(1,2,3,1,2,3,4),
  y  = c(2,3,4,1,1,2,3)
)

ggplot(df, aes(x, y, colour = as.factor(id), size = id)) +
  geom_line()

另外,有足够高声誉的人可以创建ggvis 标签吗?干杯。

【问题讨论】:

    标签: r ggplot2 ggvis


    【解决方案1】:

    以下内容:

    library(ggvis)
    
    gg <- ggvis(df, props(~x, ~y, stroke = ~factor(id)))
    gg <- gg + layer_line(props(strokeWidth := ~id*4))
    gg
    

    产生:

    我不得不调整 strokeWidth 的乘数,让它变得更厚一些,但这对你来说应该是一个很好的起点。请记住 ggivs 是基于 Vega 的,因此熟悉新图形语法中的术语几乎是了解如何在 ggvis 中“思考”的要求。

    这是一个更正确地执行此操作的示例(以及更多 ggplot2-like scale_quantitative

    gg <- ggvis(df, props(~x, ~y, stroke = ~factor(id)))
    gg <- gg + layer_line(props(strokeWidth = ~id)) 
    gg <- gg + scale_quantitative("strokeWidth",
                                  trans="linear", 
                                  domain=range(df$id), 
                                  range=c(1,10))
    gg
    

    执行?scale_quantitative 或查看"scales" online examples 应该可以让您很好地了解获得所需效果的选项。

    我还应该指出第二个示例中“=”与“:=”的使用。来自ggvis 网站:

    props() 函数使用 = 操作进行映射(缩放),使用 := 操作进行设置(未缩放)。它还使用 ~ 运算符来指示应该在数据中计算表达式(在 ggvis 中,数据可以更改);如果没有 ~ 运算符,表达式会立即在当前环境中求值。

    【讨论】:

    • 这是我尝试过的,但没有重构。阅读 Vega 文档,我看到strokeWidth以像素为单位定义了笔划宽度。这是否意味着我必须手动缩放?例如当我输入strokeWidth := ~id 时,我真正想表明的是id 2 的厚度是id 1 的两倍。假设 ids 分别是 100200 - 那么相对大小差异现在很明显,但代价是情节看起来不错。我原以为我可以做类似strokeWidth = ~id 的事情,但是,这会产生一个不渲染的情节。
    • 我在该示例中发布了更多内容,以展示如何使用scale_quantitative 进行更多“ggplot”操作。也很高兴解释更多(尽我所能......ggvis是一种全新的做事方式:-)
    • 我还应该补充一点,我认为ggvis 不会像我希望的那样从 D3 或 SVG 中抽象出来。 Vega(可以理解)在其中有大量的 D3 主义,而 D3 (可以理解)在其中有大量的 SVG 主义(至少以它常用的方式)。了解 SVG、D3 和 javascript 将是充分了解 ggvis(至少是 IMO)的关键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多