2016-05-26 10 views
11

ggvisグラフの下に水平凡例を作りたいと思います。凡例プロパティを使用してチャートの下に配置することはできますが、ラベルを凡例のタイトルの下に水平にする方法はわかりません。以下は、最小限の再現可能なコード(Webから取得)です。ggvisのグラフの下に水平離散凡例を追加します。

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)) 

df2$id <- 1 
df3$id <- 2 
df4 <- rbind(df2,df3) 
df4$id <- factor(df4$id) 

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.2), 
         y=scaled_value("y_rel", -.2) 
        ))) %>% 
    layer_points(x=~x, y=~y, data=df1, stroke:='black') 
+2

これはまだgigvis GitHubの開発者ページ(https://github.com/rstudio/ggvis/issues/409)で公開されている問題であると思われるので、これは大きなハックがなければ可能です。しかし私は間違っている可能性があります。 – Felix

+0

@Felixこの機能が 'ggvis'にまだ追加されているかどうか? – useR

+0

私の答えはあなたが探しているもののように見えますか? – useR

答えて

0

これは最も確かにハックですが、素晴らしい作品:

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", values = c(1, 1), 
      properties = legend_props(
       legend = list(
       x = scaled_value("x_rel", 0.2), 
       y = scaled_value("y_rel", -.2) 
       ))) %>% 
    add_legend("stroke", title = " ", values = c(2, 2), 
      properties = legend_props(
       legend = list(
       x = scaled_value("x_rel", 0.23), 
       y = scaled_value("y_rel", -.2) 
       ))) %>% 
    layer_points(x=~x,y=~y,data = df1,stroke:='black') 

enter image description here

基本的に、私は、別のadd_legendを追加ブランクとしてタイトルを設定し、scale_valueように調整しています最初の凡例に非常に近いが、重複していない。私は最初の凡例をvalues = c(1,1)と設定し、2番目の凡例をvalues = c(2,2)と設定して、2つの値が重なり合うようにします。これにより、水平値を持つ1つの凡例のように見えます。

関連する問題