Mal*_*lta 29 r ggplot2 plotly ggplotly r-plotly
我有一个简单的数据框:
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)
Run Code Online (Sandbox Code Playgroud)
我想以这种方式绘制它:
require(ggplot2)
ggplot(data = d,aes(x=seq,y=value))+geom_line() + geom_point()
Run Code Online (Sandbox Code Playgroud)
现在我想使用情节,主要是为了能够,当鼠标悬停在某一点上时,获取除价值之外的其他信息,例如公司名称.我试试这个:
require(plotly)
ggplotly()
Run Code Online (Sandbox Code Playgroud)
这给我一个工具提示,但只有seq和值.我尝试了选项tooltip =但它指定你可以使用美学中唯一的变量描述,我不会在我的使用中使用该名称.
有解决方案吗 我看到我不是第一个遇到这个问题的人,但我还没有找到与ggplotly合作的答案.
Uwe*_*Uwe 45
您无需plotly按@ royr2的建议修改对象.只需添加label = name第三美学
ggplot(data = d, aes(x = seq, y = value, label = name)) + geom_line() + geom_point()
Run Code Online (Sandbox Code Playgroud)
并且name除了seq和之外还会显示工具提示value.
在ggplotly帮助文件说,有关tooltip参数:
默认情况下,"全部"表示显示所有美学映射(包括非官方的"文本"美学).
所以你可以使用label美学,只要你不想使用它geom_text.
顺便说一句:我也试过text而不是label
ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line() + geom_point()
Run Code Online (Sandbox Code Playgroud)
但随后ggplot2抱怨道
geom_path:每组只包含一个观察.你需要调整群体美感吗?
并且仅绘制点.我必须添加一个虚拟组geom_line来删除问题:
ggplot(data = d, aes(x = seq, y = value, text = name)) + geom_line(group = 1) + geom_point()
Run Code Online (Sandbox Code Playgroud)
(但请注意,如果您将虚拟组作为第四个美学内部aes(),它将默认显示在工具提示中.)
但是,我发现如果你想在工具提示中绘制并显示不同的字符串,那么非官方的text审美可以变得有用.labelgeom_text
编辑回答评论一个问题:
该tooltip参数ggplotly()可用于控制的外观.ggplotly(tooltip = NULL)将完全抑制工具提示.ggplotly(tooltip = c("label"))选择美学以包含在工具提示中.
tea*_*jay 31
在@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)
Run Code Online (Sandbox Code Playgroud)
DAV*_*AVL 15
非官方的text美学允许你介绍你想要的所有变量(这里我用name两次来展示它):
require(ggplot2)
ggplot(data = d,aes(x = seq,
y = value,
group = 1,
text = paste('name: ', name,
'</br>name_again: ', name)
))+
geom_line() +
geom_point()
Run Code Online (Sandbox Code Playgroud)
我必须为@UweBlock建议的正确工作添加虚拟group美学geom_line.
最后我选择了我想在工具提示中显示的内容(这里我排除了group).
require(plotly)
ggplotly(, tooltip = c("x", "y", "text"))
Run Code Online (Sandbox Code Playgroud)
roy*_*yr2 11
你必须修改它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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19578 次 |
| 最近记录: |