Rendering images, tables and even charts inside Highcharts tooltips.
data-visualization
highcharter
Author
Joshua Kunst
Published
February 4, 2019
Modified
August 13, 2026
In highcharter R package there is highcharter::tooltip_chart helper function to put charts in the tooltip. Sadly the function is not that easy to use but is not impossible :).
# A tibble: 142 × 7
country continent year lifeExp pop gdpPercap ttdata
<fct> <fct> <int> <dbl> <int> <dbl> <list>
1 Afghanistan Asia 2007 43.8 31889923 975. <list [12]>
2 Albania Europe 2007 76.4 3600523 5937. <list [12]>
3 Algeria Africa 2007 72.3 33333216 6223. <list [12]>
4 Angola Africa 2007 42.7 12420476 4797. <list [12]>
5 Argentina Americas 2007 75.3 40301927 12779. <list [12]>
6 Australia Oceania 2007 81.2 20434176 34435. <list [12]>
7 Austria Europe 2007 79.8 8199783 36126. <list [12]>
8 Bahrain Asia 2007 75.6 708573 29796. <list [12]>
9 Bangladesh Asia 2007 64.1 150448339 1391. <list [12]>
10 Belgium Europe 2007 79.4 10392226 33693. <list [12]>
# ℹ 132 more rows
The data is ready! Now go to chart:
Code
hchart(gptot,"point",hcaes(lifeExp, gdpPercap, name =country, size =pop, group =continent, name =country))|>hc_yAxis(type ="logarithmic")|># here is the magic (inside the function)hc_tooltip( useHTML =TRUE, headerFormat ="<b>{point.key}</b>", pointFormatter =tooltip_chart(accesor ="ttdata"))
Donut example
Now we’ll use a donut chart and try to place the tooltip inside to give it importance:
Code
donutdata<-gp|>group_by(continent)|>summarise(pop =sum(pop/1e6)*1e6)hchart(donutdata, "pie", hcaes(name =continent, y =pop), innerSize =300)
Just according to keikaku.
The donut is ready. So now we need a detailed data from each continent to show in the tooltip.
Code
donutdata2<-gp|>select(continent, lifeExp, gdpPercap)|>group_nest(continent)|>mutate( data =map(data, mutate, x =lifeExp, y =gdpPercap, drop =TRUE), data =map(data, list_parse))|>rename(ttdata =data)|>left_join(donutdata, by ="continent")donutdata2
# A tibble: 5 × 3
continent ttdata pop
<fct> <list> <dbl>
1 Africa <list [52]> 929539692
2 Americas <list [25]> 898871184
3 Asia <list [33]> 3811953827
4 Europe <list [30]> 586098529
5 Oceania <list [2]> 24549947
And the chart:
Code
hc<-hchart(donutdata2,"pie",hcaes(name =continent, y =pop), innerSize =375)hc|>hc_tooltip( useHTML =TRUE, headerFormat ="<b>{point.key}</b>", pointFormatter =tooltip_chart( accesor ="ttdata", hc_opts =list( chart =list(type ="scatter"), credits =list(enabled =FALSE), plotOptions =list(scatter =list(marker =list(radius =2)))), height =225), positioner =JS("function () { /* one of the most important parts! */ xp = this.chart.chartWidth/2 - this.label.width/2 yp = this.chart.chartHeight/2 - this.label.height/2 return { x: xp, y: yp }; }"), shadow =FALSE, borderWidth =0, backgroundColor ="transparent", hideDelay =1000)
What do you think? Maybe it’s a kind of overkill, but hey, it’s up to you to (ab)use it or not! Another more subtle alternative can be put text, i.e, the normal tooltip but with a bigger size, like a knob chart.