4

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

与えます:

ここに画像の説明を入力

目盛りもフォーマットする必要があると思いますか、少なくともggvisどの目盛りにラベルを付けるかを教えてください。

4

2 に答える 2

8

textプロパティを間違った方法で使用しています。

ggvisそれ自体はデータ バインディングと R での処理のみを実行します。次に、ggvisオブジェクトを で定義された視覚化文法に「変換」します。これは、実際のレンダリングを実行するために のvega.js上に構築されます。d3.js

したがって、は、で Axes プロパティを定義するためadd_axisの単純なラッパーです。詳細については、このドキュメントを参照してください。ggvisvega.js

add_axis()関数に渡す引数は、 で指定する JSON 仕様に 1 対 1 で対応していることがわかりますvega.js。したがって、properties=axis_props(...)inはAxis プロパティのプロパティggvisにマップされます(混乱するかもしれませんが、上記のリンクをクリックすると、そこに階層が表示されます)。

プロパティパラメータが定義します。ここでドキュメントを引用しています。

カスタム軸スタイリングのオプションのマーク プロパティ定義。入力オブジェクトには、目盛り (メジャーとマイナーの両方)、majorTicks、minorTicks、ラベル、および軸 (軸線) のサブオブジェクトを含めることができます。

したがって、プロパティパラメータは、 、、および線のスタイリングを含む、スタイリングのみを変更することになっています。labelsticksaxis

あなたのコード:

properties=axis_props(labels=list(angle=90, fontSize = 10, 
                      text = c("one","two","three"))

として抽象化できます。

properties=axis_props(labels=list(...))

これは、上記の議論に基づいて、 axisのスタイリングlabelsを操作しています。それぞれlabelは単純な SVG<text>要素であり、その調整可能なプロパティはこのドキュメントにあります。また、軸ラベルのスタイルを変更するすべてのx 軸ラベルのスタイルが変更されます。

最終的には、 を指定することで、すべての x 軸の目盛りラベルを配列text = c("one","two","three")に手動で設定し、結合して string を形成することになります。 ["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)))

これにより、次のことがわかります。

ここに画像の説明を入力

ラベルは数字であり、必要な文字列ではないため、より近いですが、まだそこにはありません。

最後に、ラベルを変更するには、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)))

それはあなたに与えるでしょうここに画像の説明を入力

于 2014-08-13T20:06:47.930 に答える
3

add_axis()次のように、必要なラベルごとに関数を繰り返してみてください。

library(dplyr)
library(ggvis)
data.frame(x = c(1,2,3), y = c(1,2,3) ) %>%
  ggvis(~x,~y ) %>%
  layer_lines() %>%
  add_axis("x",values = c(1,1), properties=axis_props(
           labels=list(angle=90, fontSize = 10, text = 'one', dx = 10))) %>%
  add_axis("x",values = c(2,2), properties=axis_props(
           labels=list(angle=90, fontSize = 10, text = 'two', dx 10))) %>%
  add_axis("x",values = c(3,3), properties=axis_props(
           labels=list(angle=90, fontSize = 10, text = 'three', dx = 10)))

カテゴリが多すぎるデータがあったため、ファクタリング ソリューションが機能しませんでした。パラメーターの下で同じ繰り返し数を持つベクトルを常に呼び出していることに注意してください。理由はわかりませんが、single numbers render を呼び出したときに発生しませんでした。私が見つけた解決策は、同じ数字を2回入力することでしたxD. また、ここではdx引数を使用して、ラベル軸のオーバーレイを回避できます。

コード出力

変数のカテゴリが多すぎて、少数のラベルのみが必要な場合、これはカスタム ラベルを実現する方法です。

于 2017-10-10T00:06:54.730 に答える