私はシンプルなデータフレームを持っています:
seq <- 1:10
name <- c(paste0("company",1:10))
value <- c(250,125,50,40,40,30,20,20,10,10)
d <- data.frame(seq,name,value)
そして、私はそれをこのようにプロットしたい:
require(ggplot2)
ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point()
今、私は陰謀を使用して、ほとんどの場合、ポイントの上にマウスを移動するときに、会社名などの値以外の情報を取得できるようにします。私はこれを試してください:
require(plotly)
ggplotly()
ツールチップが表示されますが、seqとvalueのみが含まれています。オプションtooltip =を試しましたが、審美的に記述された変数のみを使用できることが指定されており、aesでは名前を使用しません。
解決策はありますか?私はこの問題で最初ではありませんでしたが、ggplotlyで動作する答えは見つかりませんでした。
@ royr2によって提案されたplotly
オブジェクトを変更する必要はありません。 3番目の美学として_label = name
_を追加するだけです
_ggplot(data = d, aes(x = seq, y = value, label = name)) + geom_line() + geom_point()
_
ツールチップにはname
とseq
に加えてvalue
が表示されます。
ggplotly
ヘルプファイルには、tooltip
パラメーターに関する説明があります。
デフォルトの「すべて」は、すべての美的マッピング(非公式の「テキスト」美的を含む)を表示することを意味します。
したがって、_geom_text
_に使用したくない限り、label
美学を使用できます。
ところで:私はtext
の代わりにlabel
も試しました
_ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line() + geom_point()
_
しかし_ggplot2
_は不満を言いました
geom_path:各グループは1つの観測のみで構成されます。グループの美観を調整する必要がありますか?
そして、ポイントのみをプロットしました。問題を削除するには、ダミーグループを_geom_line
_に追加する必要がありました。
_ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line(group = 1) + geom_point()
_
(ただし、aes()
内にダミーグループを4番目の美学として配置すると、ツールチップにもデフォルトで表示されます。)
ただし、_geom_text
_でプロットされた異なる文字列をツールチップに表示したい場合は、非公式のtext
美学がlabel
と並んで有用になることがあります。
コメントで質問に答えるために編集:ggplotly()
のtooltip
パラメーターを使用して、外観を制御できます。 ggplotly(tooltip = NULL)
はツールチップをまったく表示しません。 ggplotly(tooltip = c("label"))
は、ツールチップに含める美学を選択します。
@UweBlockの答えに基づいて、ツールチップに複数のラベルを表示するためにダミーの美学を作成することもできます。これがどこで文書化されているかはわかりませんが、経験的に発見しました。ダミー変数は指定した順序で表示されますが、デフォルト変数(例:xおよびy)が優先されます。これを回避するには、以下に示すように、これらの変数を別の美学で指定できます。
library(plotly)
p = ggplot(iris, aes(label=Species, label2=Petal.Length, label3=Petal.Width)) +
geom_point(aes(Sepal.Length,Sepal.Width))
ggplotly(p)
非公式のtext
美学により、必要なすべての変数を紹介できます(ここでは、name
を2回使用して表示しています)。
require(ggplot2)
ggplot(data = d,aes(x = seq,
y = value,
group = 1,
text = paste('name: ', name,
'</br>name_again: ', name)
))+
geom_line() +
geom_point()
@UweBlockが示唆するようにgeom_line
が適切に機能するように、ダミーのgroup
美学を追加する必要があります。
最後に、ツールチップに表示するものを選択します(ここではgroup
を除外しました)。
require(plotly)
ggplotly(, tooltip = c("x", "y", "text"))
これを行うには、_plotly object
_を変更する必要があります。または、代わりにplot_ly()
を使用してグラフを作成します...
編集:_plotly 4.0
_のリリースにより、構文が少し変更されます。
_seq <- 1:10
name <- c(paste0("company",1:10))
value <- c(250,125,50,40,40,30,20,20,10,10)
d <- data.frame(seq,name,value)
require(plotly)
gg <- ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point()
gg <- plotly_build(gg)
#OLD:
gg$data[[1]]$text <- paste("Seq:", d$seq, "<br>",
"Value:", d$value, "<br>",
"Company:", d$name)
#UPDATED:
#Plotly_build creates two separate traces:
#One with mode = markers and the other with mode = lines
#Hence modify text for the second trace
gg$x$data[[2]]$text <- paste("Seq:", d$seq, "<br>",
"Value:", d$value, "<br>",
"Company:", d$name)
gg
_