reactjs - 如何在弹出 map 框中使用 D3 图形?

标签 reactjs d3.js graphics popup mapbox-gl-js

我正在尝试在 map 框的弹出窗口中显示 D3 图形。我没能成功,因为 mapbox 的弹出窗口只是接受纯 HTML。
有没有办法做到?如下图所示,图形位于弹出窗口内。
enter image description here

最佳答案

我能够做到的方式是使用 Chart.min.js。和 jQuery。
enter image description here
这是一个 fiddle I have created to show you how to create a popup with a chart .
相关代码如下。
首先将您的链接添加到 jquery 和 chart.js

<!-- jQuery -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<!-- ChartJS -->
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.4/dist/Chart.min.js"></script>
然后你添加一个将由 chart.js 管理的 Canvas
        var popup = new mapboxgl.Popup({ closeOnClick: false })
            .setLngLat([-96, 37.8])
            .setHTML('<div class="chart"><canvas id="lineChart" style="min-height: 250px; height: 250px; max-height: 250px; max-width: 100%;"></canvas></div>')
            .addTo(map);
然后添加数据源、选项并在 Canvas 中呈现图表
   //this is fake data just for testing
   var areaChartData = {
      labels  : ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
      datasets: [
        {
          label               : 'Digital Goods',
          backgroundColor     : 'rgba(60,141,188,0.9)',
          borderColor         : 'rgba(60,141,188,0.8)',
          pointRadius          : false,
          pointColor          : '#3b8bba',
          pointStrokeColor    : 'rgba(60,141,188,1)',
          pointHighlightFill  : '#fff',
          pointHighlightStroke: 'rgba(60,141,188,1)',
          data                : [28, 48, 40, 19, 86, 27, 90]
        },
        {
          label               : 'Electronics',
          backgroundColor     : 'rgba(210, 214, 222, 1)',
          borderColor         : 'rgba(210, 214, 222, 1)',
          pointRadius         : false,
          pointColor          : 'rgba(210, 214, 222, 1)',
          pointStrokeColor    : '#c1c7d1',
          pointHighlightFill  : '#fff',
          pointHighlightStroke: 'rgba(220,220,220,1)',
          data                : [65, 59, 80, 81, 56, 55, 40]
        },
      ]
    }

    //these are the options for testing
    var areaChartOptions = {
      maintainAspectRatio : false,
      responsive : true,
      legend: {
        display: false
      },
      scales: {
        xAxes: [{
          gridLines : {
            display : false,
          }
        }],
        yAxes: [{
          gridLines : {
            display : false,
          }
        }]
      }
    }


    var lineChartCanvas = $('#lineChart').get(0).getContext('2d')
    var lineChartOptions = jQuery.extend(true, {}, areaChartOptions)
    var lineChartData = jQuery.extend(true, {}, areaChartData)
    lineChartData.datasets[0].fill = false;
    lineChartData.datasets[1].fill = false;
    lineChartOptions.datasetFill = false

    var lineChart = new Chart(lineChartCanvas, { 
      type: 'line',
      data: lineChartData, 
      options: lineChartOptions
    })
如果此答案解决了您的问题,请将其标记为 接受答案 ,这样其他用户就会知道这是正确的解决方案。

关于reactjs - 如何在弹出 map 框中使用 D3 图形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65702596/

相关文章:

reactjs - 不可分配给类型 IntrinsicAttributes 和 IntrinsicClassAttributes React.js

javascript - React Router 在 localhost 和 Heroku 上的行为不同

node.js - 运行 react 脚本测试时为 "Error: spawn git ENOENT"

javascript - 如何从函数中调用一个类

javascript - 序数尺度的 rangeRoundBands()

java - 用鼠标在 Canvas 上画线 : Java awt

javascript - 在 D3 JS 中将 div 放置在图表的左上角

javascript - Force.drag().on 返回未定义

c - 基于文本语言的决策

algorithm - 重叠图像选择算法