ggplot中的geom_point忽略未知的美学:文本问题?

3
我正在生成一个SVG分面图。我希望在悬停时出现工具提示。我在ggplot / geom_point中使用text美学来制作工具提示文本。
产生了一个警告...警告:忽略未知的美学:text。尽管有警告,但它确实按照我在geom_point的下定义的方式生成了工具提示。然而,一旦图表中的分面数量超过21个,工具提示仅出现在点的子集中。它似乎不可靠。但是,删除text美学始终会为所有点在任何数量的分面上产生默认工具提示。当包含text美学时,生成的工具提示是我定义的特定文本和默认文本的组合,看起来像这样...截图工具提示... 不理想,但至少包含了我想要显示的信息,特别是将速率/'000作为实际值而不是对数值。
我应该避免使用此功能,还是有更好、更可靠的方法来实现此效果?
    p <- ggplot(data=df.data_chart_category
               ,aes(x=TourDate, y=rate_per_thousand_lifts, group=key, colour=factor(key))
               ,environment = environment()
        ) +
        geom_point(aes(size = size, text = sprintf("Rate/'000: %s<br>Misses: %s<br>Hits: %s<br>Total Lifts: %s", rate_per_thousand_lifts, misses, hits, total_tour_count)), alpha=0.4) +
        scale_size(name = "Bin count", breaks = c(10, 50, 100, 500, 800, 1000), range = c(1,12)) +
        scale_color_manual("", values = c("Lifter1" = "red", "Lifter2" = "green", "Lifter3" = "lightblue", "Lifter4" = "purple", "NoLifter" = "cyan", "GPS" = "darkgrey")) +
        guides(colour = guide_legend(override.aes = list(size=10))) +
        facet_wrap(as.formula(paste("~", facet_wrap_column_name)), ncol=number_of_facet_columns) +
        labs(x = x_axis_label, y = snr_y_axis_label, title = snr_chart_title, subtitle = snr_chart_subtitle, caption = snr_chart_caption, color="Lifter") +
        theme_few() +
        theme(axis.text.x = element_text(angle=90, vjust=-0.01)) + 
        theme(axis.title = element_text(size = axis_font_size)) + 
        theme(plot.title = element_text(color = '#666666', 
                                  face = 'bold',
                                  size = title_font_size,
                                  hjust = 0)) + 
        scale_y_log10()

    pp <- ggplotly(p)
    htmlwidgets::saveWidget(widget=pp, file="index.html", selfcontained=FALSE)

我已经查看了绘图对象,很明显正确的文本已分配给绘图对象元素。在此处迭代对象将没有帮助,而且无论如何,对于我来说,考虑到图案的存在似乎有点棘手。我在 https://github.com/liamcaffrey/svg_tooltip.git 上放置了一个完全工作的示例,并包含了 dput 数据。我还包括了示例 png 和 html/svg 文件。工具提示似乎始终在零值上工作,而有时则在非零值上工作。 - Liam Caffrey
4个回答

5

我认为这里的解决方案不正确,因为从 ggplotly 的角度来看,geom_pointgeom_vline 中的文本属性是完全有效的(我正在使用后者),所以这显然是一个 bug。我的解决方案如下:

gg <- gg + suppressWarnings(geom_point(aes(size = size, text = sprintf("Rate/'000: %s<br>Misses: %s<br>Hits: %s<br>Total Lifts: %s", rate_per_thousand_lifts, misses, hits, total_tour_count)), alpha=0.4))

2

我已经让我的示例按照我的预期工作了一部分。我并不真正理解如何设置定制的工具提示。我在这里发布了一个可用的示例(点击此处)。示例数据仍然可以在TooltipNotWorkingData.txt中找到。

主要问题与我的工具提示参数放置有关。

    p <- ggplot(data=df.data_chart_category
               ,aes(x=calendar_day, y=rate_per_thousand, group=key, colour=factor(key), text = tooltip, onclick = clickjs)
               ,environment = environment()
        )

这应该是 ggplot / aes 的一部分,而不是 geom_point / aes。在 ggplotly 调用中引用提示工具 pp < - ggplotly(p, tooltip = "tooltip")是必要的,以覆盖默认提示工具。

我仍然遇到了某些大小图表上提示工具显示的问题,并且我已经开了一个新的问题在 SO 上here


1
我知道这篇文章已经有些年头了,但我找到了一个对我有效的解决方案。
当我尝试更新ggplotly()中的“tooltips =“text””参数并且由于某种原因无法使用ggplot的映射进行更新时,我一直遇到这个问题,变得很沮丧。
我发现一个奇怪的事情是,由于某种原因,当“stat =“sum””时,它不会更新tooltip中的文本,并在生成图时返回错误“Ignoring unknown aesthetics: text”。然而,“stat =“count””和“stat =“identity””都可以正常工作。

1
通常情况下,修复plotly工具提示的问题需要构建绘图对象并调整其中的text
for (i in 1:nrow(df.data_chart_category)){
    pp$x$data[[i]]$text <- c(pp$x$data[[i]]$text, "") 
}

这种情况下很难检查它是否有效,因为我们没有原始数据框或可重现的示例。

好的。看起来很不错。谢谢。我会试一试的。我现在是在手机上阅读,所以也不能玩它!看起来你正在访问每行数据的xtext。我看不到,但是没有y部分吗?提示工具是针对xy的组合。抱歉没有代码,但是指向正确方向的指针将不胜感激。我明天会在pp的内部进行探索。 - Liam Caffrey
对于(i在1:length(pp$x$data)){ pp$x$data[[i]]$text <- c(vector_of_length_count_of_x) }其中_vector_of_length_count_of_x_是从df.data_chart_category的内容构建的。我还需要进行更多的调查,但我认为我知道该怎么做了。谢谢 - Liam Caffrey
我已经查看了绘图对象,很明显正确的文本被分配给了绘图对象元素。在这里迭代对象是没有帮助的,而且无论如何,考虑到存在facets,这对我来说似乎有点棘手。我在链接上放置了一个完全工作的示例,其中包含dput数据。我已经包括了示例png和html/svg文件。提示似乎总是在零值上工作,并且有时在非零值上工作。 - Liam Caffrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接