我希望创建一个基于this JSfiddle的覆盖零碎的高 map .我使用了events = list(load = JS()构造来调用JS代码,复制自上面的演示.我遇到的问题,如下所示,是输出只包含一个piechart,而它应该包含一个piechart用于序列中每个非缺失点.

此外,我注意到饼图呈现在 map 的中心,但工具提示和数据是数据系列的最后一点—这里是SE(我认为瑞典!).同样重要的是,饼图总是呈现在同一个位置,而不管data个国家的id个.我做错什么了?我附上下面的输出图像,以及复制映射的代码.

[Image of highmap output with single overlaid piechart](https://i.stack.imgur.com/VbhCc.png)

Update 多亏了费利克斯·贾斯勒的 comments ,我意识到每个饼图实际上都在绘制,但问题是,他们都在同一个地方绘制.在饼图上启用标签可以清楚地看到这一点,如下面更新的图像输出所示.此外,我还发现了this post个,vue.JS中的highcharts用户遇到了完全相同的问题.这里的解决方案是用户更新到最新版本的highcharts v10.2.我有最新版本的highcharter(v9.4),所以我认为这个解决方案可能需要highcharter开发人员的一些投入.我开了一个关于高宪章git的问题here.

Final update The answer given below by jedrzerjuta has been accepted with much gratitude and the result can be seen below. Correct rendering of overlaid piecharts using Highcharter 10.2.0

# Required
library(tidyverse)
library(highcharter)

# Create data
data <- tibble(
  id = c(
    "PL",
    "NO",
    "DE",
    "BY",
    "FR",
    "CZ",
    "SE"
  ),
  successes = c(
    15,
    20,
    10,
    10,
    1,
    20,
    20
  ),
  failures = c(
    3,
    2,
    10,
    15,
    2,
    20,
    8
    
  )
)
data$value <- data$successes-data$failures

# Plot
hcmap("custom/world-highres",
      data = data,
      joinBy = c("iso-a2", "id"),
      keys =c('id', 'successes', 'failures', 'value')
)%>%
  hc_colorAxis(
    dataClasses=list(
      list(
        from = -15,
        to = -1,
        color = '#faa',
        name = 'Successes'
      ),
      list(
        from = 0,
        to = 0,
        color = '#ddd',
        name = 'Neutral'
      ),
      list(
        from = 1,
        to = 18,
        color = '#adf',
        name = 'Neutral'
      )
    )
  )%>%
  hc_chart(events = list(load = JS("function() {
  var chart = this;
  chart.series[0].points.forEach(country => {
  if (!country.isNull) {
    chart.addSeries({
      type: 'pie',
      name: country.id,
      zIndex: 4,
      size: 40,
      dataLabels: {
        enabled: false
      },
      onPoint: {
        id: country.id
      },
      states: {
        inactive: {
          enabled: true
        }
      },
      data: [{
        name: 'Successes',
        y: country.successes,
        color: '#adf'
      }, {
        name: 'Failures',
        y: country.failures,
        color: '#faa'
      }]
    }, false);
  }
        }
        );
  chart.redraw();
}
"
  )
  )
  )

推荐答案

饼图没有放在国家坐标上的问题与CRAN上可用的最新Highcharter版本中使用的Highcharts v9.3.1严格相关.上面的代码使用了onPoint对象属性,这需要series-on-point个模块,可以从Highcharts v10版本获得.>

作为解决办法,您可以从Highcharter GitHub repository:https://github.com/jbkunst/highcharter?tab=readme-ov-file#installation安装开发版本,并使用highcharter::hc_add_dependency方法添加series-on-point模块.这个版本使用Highcharts v10.2.0,所以它应该可以正常工作.

下面你会发现更新的R代码:

# Required
library(tidyverse)
remotes::install_github("jbkunst/highcharter")

# Create data
data <- tibble(
  idd = c(
    "PL",
    "NO",
    "DE",
    "BY",
    "FR",
    "CZ",
    "SE"
  ),
  successes = c(
    15,
    20,
    10,
    10,
    1,
    20,
    20
  ),
  failures = c(
    3,
    2,
    10,
    15,
    2,
    20,
    8
    
  )
)
data$value <- data$successes-data$failures

# Plot
highcharter::hcmap("custom/world-highres",
      data = data,
      joinBy = c("iso-a2", "idd"),
      keys =c('idd', 'successes', 'failures', 'value')#,
      #dataLabels = list(enabled = TRUE, format = "{point.idd}",
      #style=list(fontSize='10'))
)%>%
  highcharter::hc_add_dependency("modules/series-on-point.js")%>%
  highcharter::hc_colorAxis(
    dataClasses=list(
      list(
        from = -15,
        to = -1,
        color = '#faa',
        name = 'Successes'
      ),
      list(
        from = 0,
        to = 0,
        color = '#ddd',
        name = 'Neutral'
      ),
      list(
        from = 1,
        to = 18,
        color = '#adf',
        name = 'Neutral'
      )
    )
  )%>%
  highcharter::hc_chart(events = list(load = highcharter::JS("function() {
  var chart = this;
  chart.series[0].points.forEach(country => {
  if (!country.isNull) {
    chart.addSeries({
      type: 'pie',
      name: country.idd,
      zIndex: 6,
      size: 40,
      dataLabels: {
        enabled: true
      },
      onPoint: {
        id: country.id
      },
      states: {
        inactive: {
          enabled: true
        }
      },
      data: [{
        name: 'Successes',
        y: country.successes,
        color: '#adf'
      }, {
        name: 'Failures',
        y: country.failures,
        color: '#faa'
      }]
    }, false);
  }
        }
        );
  chart.redraw();
}
"
  )
  )
  )

R相关问答推荐

强制相关图以显示相关矩阵图中的尾随零

ggplot 2中的地块底图(basemaps_gglayer()不起作用)

如何在R中添加截止点到ROC曲线图?

如何动态更新selectizeInput?

R s iml包如何处理语法上无效的因子级别?'

S用事件解决物质平衡问题

在另存为PNG之前隐藏htmlwidget绘图元素

将文件保存到新文件夹时,切换r设置以不必创建目录

在数组索引上复制矩阵时出错

根据列A中的差异变异列,其中行由列B中的相对值标识

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

在R中创建连续的期间

有没有办法定制Plot(allEffects())面板标题?

创建在文本字符串中发现两个不同关键字的实例的数据框

是否有可能从边界中找到一个点值?

使用ifElse语句在ggploy中设置aes y值

构建一个6/49彩票模拟系统

如何使用ggplot2根据绘图中生成的斜率对小平面进行排序?

如何用不同长度的向量填充列表?

如何在R中添加标识连续日期的新列