【问题标题】:ggvis - add_legend with multiple data and position legend inside graphggvis - 在图中添加多个数据和位置图例的 add_legend
【发布时间】:2015-06-20 02:05:40
【问题描述】:

我正在尝试使用来自不同数据帧的数据在 ggvis 图中添加带有任意文本的图例。我尝试过使用add_legend(),但我不知道要使用哪些参数。使用plot() 使用legend() 函数非常简单,但很难找到使用ggvis() 的方法

这是我使用plot() 的一个简单示例:

df1 = data.frame(x = sample(1:10), y = sample(1:10))
df2 = data.frame(x = 1:10, y = 1:10)
df3 = data.frame(x = 1:10, y = sqrt(1:10))

plot(df1)
lines(df2$x, df2$y, col = "red")
lines(df3$x, df3$y, col = "green")
legend("topleft", c("Data 2","Data 3"), lty = 1, col = c("red","green"))

现在,使用ggvis() 我可以绘制来自不同数据集的点和线,但我找不到使用add_legend() 放置图例的方法,这是使用ggvis() 的代码:

df1 %>% ggvis(x=~x,y=~y) %>% layer_points() %>% 
layer_paths(x=~x,y=~y,data = df2, stroke := "red") %>% 
layer_paths(x=~x,y=~y,data = df3, stroke := "green") 

我将非常感谢任何帮助。

谢谢。

已编辑:

这是一个示例代码,仅使用一个数据框和plot()

df = data.frame(x = sample(1:10), y = sample(1:10), x2 = 1:10, y2 = 1:10, y3 = sqrt(1:10) )
plot(df[,c("x","y")])
lines(df$x2, df$y2, col = "red")
lines(df$x2, df$y3, col = "green")
legend("topleft", c("Data 2","Data 3"), lty = 1, col = c("red","green"))

【问题讨论】:

  • 我不知道你是否可以用两个不同的数据集来做到这一点。虽然从两者中制作一个数据框然后将其融合会更有意义。你会得到你想要的这种方式。如果您可以接受,那么我可以提供解决方案。
  • 是的,我可以将所有数据放在一个数据框中。谢谢。

标签: r ggvis


【解决方案1】:

所以,我想出的是以下,它有效:

#add an id column for df2 and df3 and then rbind
df2$id <- 1
df3$id <- 2
df4 <- rbind(df2,df3)
#turn id into a factor
df4$id <- factor(df4$id)

#then plot df4 using the stroke=~id argument
#then plot the legend
#and finally add df1 with a separate data
df4 %>% ggvis(x=~x,y=~y,stroke=~id) %>% layer_lines() %>%
        add_legend('stroke', orient="left") %>%
        layer_points(x=~x,y=~y,data = df1,stroke:='black') 

它有效:

如果您想将图例移动到绘图内的某个位置,那么您需要尝试以下操作:

df4 %>% ggvis(x=~x,y=~y,stroke=~id) %>% layer_lines() %>%
  #make sure you use add relative scales
  add_relative_scales() %>%
  #values for x and y need to be between 0 and 1
  #e.g for the x-axis 0 is the at far-most left point and 1 at the far-right 
  add_legend("stroke", title = "Cylinders",
             properties = legend_props(
               legend = list(
                 x = scaled_value("x_rel", 0.1),
                 y = scaled_value("y_rel", 1)
               ))) %>%
  layer_points(x=~x,y=~y,data = df1,stroke:='black') 

还有输出:

【讨论】:

  • 我想在 ggvis 的文档中看到这样的例子。官方页面(Rstudio)几乎没有提供一些例子。你能给我推荐一个很好的资源来了解更多关于 ggvis 的信息吗?谢谢。
  • 是的,我知道。不幸的是,文档仍然很差。这可能是因为开发人员目前有很多想法,但它会变得更好。有一个文档here,然后我通常使用?&lt;whatever_function_i_need&gt;。对于这个示例,我只是查看了?add_legend,然后尝试了这些示例并尝试了许多不同的参数(最初崩溃了很多),直到我做对了。恐怕还没有其他来源。
  • 感谢您的建议 :)
猜你喜欢
  • 2015-07-14
  • 2018-09-28
  • 1970-01-01
  • 2016-09-24
  • 2017-11-20
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多