如何在React ChartJS中获取填充圆图?

2024-04-03

我想介绍一个填充圆图(气泡图的变体,仅包含半径作为其尺寸)。React Chartjs乃至Chartjs仅支持气泡图,不支持圆形图。这是我想要添加的预期图表的示例

我可以使用这样的东西吗react-chartjs?例如,需要执行如下操作来定期启动气泡图。

const defaultDatasets = [
            {
              label: ["China"],
              backgroundColor: "rgba(255,221,50,0.2)",
              borderColor: "rgba(255,221,50,1)",
              data: [{
                x: 735,
                y: 50,
                r: 15
              }]
            }, {
              label: ["Denmark"],
              backgroundColor: "rgba(60,186,159,0.2)",
              borderColor: "rgba(60,186,159,1)",
              data: [{
                x: 116,
                y: 50,
                r: 10
              }]
            }, {
              label: ["Germany"],
              backgroundColor: "rgba(0,0,0,0.2)",
              borderColor: "#000",
              data: [{
                x: 2116,
                y: 50,
                r: 15
              }]
            }
          ]

由于我的要求是填充圆图,所以我有两个选择。

  • 我可以省略x and y价值观。但随后所有的泡沫都会变得混乱。
  • 我可以随机化x and y值并隐藏轴。但随机化并不能保证任何气泡重叠,或者可能使一些气泡集中到一点。

是否有任何技巧或解决方法可以像上图一样以良好的顺序显示气泡?

EDIT:除了提供的伟大的黑客@另类哺乳动物,还有另一个很好的库叫做Nivo提供免费使用的填充圆图。一探究竟https://nivo.rocks/circle-packing/canvas/ https://nivo.rocks/circle-packing/canvas/


只是一个普通的 JS、Chart.JS 和 D3 解决方案......

使用 D3 layout.pack 算法(该算法似乎已被弃用,因此这只是权宜之计)但是...它调用 D3 打包例程来计算每个点的 x,y 和缩放半径,然后将其提取到ChartJS 气泡图可以使用的数据结构。

var w = document.getElementById("c").offsetWidth,
  h = document.getElementById("c").offsetHeight;

// build random set of circles for the d3 packing
var data = {
  "name": "root",
  "children": []
}
for (var i = 1; i <= 15; i++) {
  data["children"].push({
    "name": i,
    "size": Math.floor((Math.random() * 200) + 1)
  })
}

// use D3 to pack into the canvas size, with a little bit of padding
var nodes = d3.layout.pack()
  .value(function(d) {
    return d.size;
  })
  .size([w, h])
  .padding(4)
  .nodes(data);

// Get rid of root node
nodes.shift();

// take the packed nodes data, and push to format ChartJS expects for bubbles
nodedata = [];
for (i = 0; i < nodes.length; i++) {
  node = nodes[i]
  nodedata.push({
    "x": node.x,
    "y": node.y,
    "r": node.r
  })
}

// create a bubble chart with no labels, border lines etc
var bubbleChart = new Chart(document.getElementById("cc"), {
  type: 'bubble',
  data: {
    datasets: [{
      data: nodedata,
      backgroundColor: "rgba(212,121,212,1)"
    }]
  },
  options: {
    scales: {
      x: {
        ticks: {
          display: false,
        },
        grid: {
          display: false
        },
        border: {
          display: false
        }
      },
      y: {
        display: false,
        ticks: {
          display: false,
        },
        grid: {
          display: false,
        },
        border: {
          display: false
        }
      }
    },
    maintainAspectRatio: false,
    plugins: {
      legend: {
        display: false
      },
    }
  }
});
#c {
  border: 1px solid black;
  width: 380px;
  height: 280px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<div id="c"><canvas id="cc"></canvas></div>

Issues:

  • 有时我们会得到稍微重叠的圆圈
  • 包装经过优化以填充圆形,而不是有效地使用整个矩形
  • 无重心,提高聚类性
  • 如前所述,依赖于较旧的 D3 版本

我怀疑这些问题中的大多数都可以通过更复杂的 D3 力模型应用程序来解决(允许它运行几个刻度,直到圆圈定位然后传递到图表)

上述功劳D3部分解决方案 https://stackoverflow.com/a/13501153/1569675 to seliopou https://stackoverflow.com/users/1019358/seliopou。 开了一个新问题 https://stackoverflow.com/q/76911425/1569675基于这个答案,看看是否有人有一个使用 D3.js 的forceSimulation 功能的聪明的解决方案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在React ChartJS中获取填充圆图? 的相关文章

随机推荐

  • 当我添加点击事件时,我的 javascript 函数会重复运行(?)

    免责声明 我正在尝试学习javascript 我不是一个聪明人 所以 我做了一个 Jquery 图像滑块 我很自豪 有用 它加载图像 并日复一日地逐个显示它们 生活过得很好 然后我想为滑块添加导航 黑暗降临在我的小王国上 当我单击其中一个按
  • 保存附件时排除图像 png 和 gif 的 VBA 代码

    我正在使用宏来回复附件 但它总是获取嵌入在邮件中的所有图像并将它们作为附件 我试图在将附件下载到临时文件夹时插入一个片段以排除所有 png 和 gif 格式 原始代码 工作 但也下载嵌入图像 Sub ReplyWithAttachments
  • 哈斯克尔“点黑客”

    In the 数独解决方案的 Wiki 页面 http www haskell org haskellwiki Sudoku Chaining style Solver 一种解决方案声称使用 Dot Hack 链接的 Github 页面不再
  • Windows 8 上的 Firefox 远程调试“意外错误”

    我需要在 Firefox 中调试 Android 的 Web 应用程序 我尝试将设备连接到桌面版 Firefox 但总是收到错误 意外错误 我已经执行了所有步骤https developer mozilla org en US docs T
  • 解析没有完整路径的json

    我想解析 json 而不输入它的路径 I have 如何从未转义的 Url 中获取字符串 我怎样才能在没有路径的情况下做到这一点 所以我有那些 和 我该如何使用它 我的代码是 string itemname Hat with no name
  • 如何在 PHP 中用字符串回显警报——单引号和双引号的一些混淆

    我对如何在屏幕上表示输出 echo 语句中的字符串来调试 php 感到完全困惑 首先 这对我来说实际上很完美 echo 这使用双引号作为 echo 语句的一部分 可以这么说 在命令的外部 并在警报语句上使用单引号 它有效 那么如何在警报语句
  • 没有jquery的outerWidth

    可以使用dom获取元素outerWidth吗 Ej var width document getElementById myDiv outerWidth 不 但是您可以获得 offsetWidth 这可能就是您想要的 From http w
  • linux c - 获取服务器主机名?

    有谁知道有一个函数可以获取linux服务器的主机名吗 我真的不想包含任何标头或编译其他库 希望有一个默认内置的函数 我是 c 新手 like 获取主机名 http linux die net man 2 gethostname 这是运行您的
  • 一个恶意链接仍然反映在网站上

    我的网站是一个静态html网站 没有cms 没有wordpress https www reternetics com https www reternetics com 我运行谷歌广告已经有一段时间了 但现在他们拒绝了我的广告 他们说 该
  • 如何使用 Swift 获取 iOS APP 存档日期 [重复]

    这个问题在这里已经有答案了 我的应用程序有一个要求 我需要使用 swift 显示 ipa 文件创建日期 谁能告诉我该怎么做 提前致谢 您可以使用 Bundle 属性获取应用程序的 url可执行文件URL https developer ap
  • 在mvc c#环境中将doc转换为pdf

    您好 我有一个在特定用户 app pool 用户 下运行的 C MVC 应用程序 我需要将 doc 或 docx 文件转换为 pdf 我认为一个不错的选择是使用 libreoffice 来启动一个启动此进程的进程 为了让自己的生活更轻松 如
  • mat-select 和 mat-chip 可以一起使用吗?

    我想知道是否可以 混合 mat select and mat chip list 在里面chip list 我想显示从中选择的选项mat select 如果是的话我该怎么办 对的 这是可能的 你需要使用
  • 使用 php 将数组分成块并按块在新行中显示结果

    所以正如标题所说 我有一个数组 array 0 gt a 1 gt b 2 gt c 3 gt d 4 gt e 5 gt f 我想做的是循环遍历并分块结果并像这样打印它们 ab cd ef OR abc def 到目前为止我得到了这个 我
  • 如何动态启用禁用的复选框?

    请看这里 http jsfiddle net nShQs http jsfiddle net nShQs 按禁用按钮 然后按启用按钮 该复选框未启用 HTML
  • 将 blittable 结构复制到非托管内存位置的最快方法 (IntPtr)

    我有一个类似于以下的功能 MethodImpl MethodImplOptions AggressiveInlining public void SetVariable
  • Facebook 好友对话框无法在移动设备上运行

    序幕 我遇到了与之前提出的问题中描述的相同的问题 FB 在移动设备上添加好友对话框不起作用 https stackoverflow com questions 17230231 fb add friend dialog on mobile
  • 无法在 R 中对 data.table 使用 dput

    我有以下 data table 无法使用 dput 命令的输出来重新创建它 gt ddt Unit Anything index new 1 A 3 4 1 1 2 A 6 9 2 1 3 A1 1 1 1 2 4 A1 2 2 2 2 5
  • 此版本的 TensorFlow Probability 需要 TensorFlow 版本 >= 2.3

    我尝试使用 TensorFlow Probability 运行模型 但是当我运行它时 我收到以下错误 ImportError This version of TensorFlow Probability requires TensorFlo
  • 获取当前订阅 ID

    使用Powershell Azure模块 有没有办法获取活动订阅ID 我可以使用设置订阅Set AzContext but Get AzContext返回没有特定名称的订阅名称ID column Get AzSubscription返回订阅
  • 如何在React ChartJS中获取填充圆图?

    我想介绍一个填充圆图 气泡图的变体 仅包含半径作为其尺寸 React Chartjs乃至Chartjs仅支持气泡图 不支持圆形图 这是我想要添加的预期图表的示例 我可以使用这样的东西吗react chartjs 例如 需要执行如下操作来定期