如何在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中获取填充圆图? 的相关文章

  • 是的,验证 2 个以上相关输入

    我正在使用 yup 和 formik 来管理我的表单 我使用 yup 进行表单验证 我面临的问题是 假设我有三个字段fieldA fieldB and fieldC 验证是 fieldA fieldB必须等于fieldC 这是我所做的使用
  • 访问其他类的 this.state 值 [React Native]

    我只是想问如何从其他类访问 this state sampleString 这是我的代码 class MainClass extends Component constructor props super props this state
  • 将 next.js 与纱线工作区结合使用

    今天遇到了这样的项目结构的复杂情况 packages app pages package json ui kit pages package json shared babelrc package json root lvl 包 json
  • 如何使用 Draft-js-mention-plugin 以编程方式添加提及?

    问题 我正在尝试为使用创建的内容创建一个编辑界面draft js draft js mention plugin 然而 editorState没有持久化 只有纯文本 提及被保存为对象数组 现在我需要使用该数据重新创建 editorState
  • 如何使用 API 中的数据填充选择的下拉元素 - ReactJS

    我对 React 还很陌生 我正在从 API 获取数据 当我检查控制台日志时可以看到数据 但是我不知道如何使用 map 创建一个新数组 然后选项元素可以使用该数组来显示货币代码 目前它填充下拉列表 但选项元素全部为空 结果显示为 NaN 下
  • 如何在react.js中将/n替换为换行符?

    我正在尝试更换每一个 n to a br tag in ReactJS In my note note对象有一个包含多个的字符串 n in it 示例注释 注释 test ntest ntest 我尝试过的ReactJS note note
  • VirtualizedList:您有一个很大的列表,更新速度很慢

    我使用 FlatList 来处理大量项目 我收到来自 Expo XDE 的以下警报 VirtualizedList 您有一个更新速度很慢的大列表 make 确保你的 renderItem 函数渲染遵循 React 的组件 性能最佳实践 例如
  • 如何在打字稿中使用react-navigation的withNavigation?

    我正在尝试结合使用react native react navigation 和typescript 来创建一个应用程序 只有两个屏幕 HomeScreen and ConfigScreen 和一个组件 GoToConfigButton 总
  • 我想将我的 NEXT.js 项目链接到静态网站

    我有一个使用 HTML CSS 开发的网站 它是一个静态网站 但现在我使用 NEXT js 与 Strapi API 集成创建了一个博客项目 我的问题是如何将我的静态网站与我的 Next js 项目链接起来 我尝试使用链接标签 但没有用 i
  • 无法在scrollView中滚动

    我有一个屏幕 我可以在输入字段中输入内容并获得相应的搜索结果 该列表在 ScrollView 中呈现 但当键盘打开时 在 Android 中 它仍然不允许我滚动 我怎样才能解决这个问题 return lt gt addressesFound
  • Hydrate with RTK Query 确实会抛出错误

    我有一个非常简单的组件来显示来自本地 API 的数据 使用 Nextjs API 路由制作 我使用 RTK 查询来获取数据 const api createApi reducerPath data baseQuery fetchBaseQu
  • 全新安装 create-next-app 后,无效的 href 传递给路由器错误

    在我的本地计算机上安装 nextjs 应用程序后 使用create next app我在控制台中收到此错误Invalid href passed to router 有谁知道如何解决它 我尝试使用to属性而不是href属性在Link组件的但
  • Redux如何处理reducer中的错误

    我不确定如何处理 redux 减速器中的错误 当我的 API 获取返回数据时 我需要转换其结构并检查结果数据上设置的各种属性 但是 我不能在减速器中抛出错误 因为 redux 至少需要返回之前的状态 我该如何处理这个问题 注意 我正在使用反
  • linux azure web 应用程序不显示我的reactjs 应用程序

    我使用 npx create react app 创建了一个 Reactjs Web 应用程序 并创建了一个 azure ci cd 管道以将构建文件夹推送到我的 Linux Web 应用程序实例 我还指定了启动命令 pm2 serve h
  • 在 React 中 npm start 期间意外导入令牌

    我正在学习 React 并创建了一个模拟项目 但是当我运行该项目时出现以下错误 我的 webpack config js 文件代码如下 module exports entry client js output filename bundl
  • 如何在单击按钮时清除反应挂钩中的间隔

    我正在用反应钩子构建一个简单的计时器 我有两个按钮启动和重置 当我单击开始按钮时 handleStart 函数工作正常 计时器启动 但我不知道如何在单击重置按钮时重置计时器 这是我的代码 const App gt const timer s
  • 如何将React JS状态保存到本地存储中

    我不知道如何将 React js 状态存储到本地存储中 import React Component from react import App css import auth createUserProfileDocument from
  • 有什么办法可以避免使用 React 的 SSR 中的“文本内容不匹配”警告?

    我已经用 webpack 和 HMR 设置了 SSR 环境 有一个静态呈现的标记 服务器传递给客户端和client js捆绑与ReactDOM hydrate 方法 如果我更改源代码 HMR 可以正常工作 但会在控制台中发出警告 指出客户端
  • WebpackError:ReferenceError:Gatsby 上未定义窗口

    我已经在互联网上进行了大量搜索 但无法解决这个问题 我正在使用 Gasby 开发静态页面 但遇到此错误 WebpackError ReferenceError window is not defined 我的线索是 这与我正在使用的引导 模
  • Highcharts 3.0 气泡图——控制气泡大小

    在 Highcharts 3 0 中 可以创建 气泡 类型的图表 而在 3 0 之前 必须使用 散点 图表并修改标记大小才能制作气泡图 旧方法的好处是您可以完全控制每个气泡的可见像素半径 新的气泡图会自动调整气泡的大小 以便它们相对于彼此调

随机推荐

  • 当我添加点击事件时,我的 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 例如 需要执行如下操作来定期