如何使用带有工具提示的 ChartJs 或 D3 创建 RRG(相对旋转图)?

2023-12-10

我想使用 ChartJS 或 D3Js 使用任何开源创建 RRG

我已经尝试过这个,但无法绘制象限分叉示例https://codesandbox.io/s/chart-js-forked-m1zug2

期望应该如下所示

在此输入图像描述


您可以使用 Chart.js 创建类似的东西;几乎任何东西都可以用它来绘制图表,因为它是一个开放的系统,对定制有强大的支持。不过,实现一种不受本机支持的图表类型需要付出多少努力可能会有所不同。

对于您在图片中描述的图表类型,我会选择以下内容:

  • 混合图表:lines with stacking并填充绘制象限
  • a 气泡图为了......气泡
  • Chartjs-插件-注释对于角落里的文字
  • Chartjs-插件-数据标签用于气泡的标签

这是一个可以帮助您入门的示例,其中包含所有这些成分作为概念证明 - 要在生产中实现有用的东西,还有很多工作要做。特别是,工具提示只是标准版本,因此您需要使用库中可用的广泛选项集来配置它(请参阅docs).

Chart.register(ChartDataLabels)
const xMin = 90, xMax = 110;
const yMin = 90, yMax = 110;

const xHalf = (xMin+xMax)/2, xHalfPlus = xHalf + 1e-6,
    yHalf = (yMin + yMax)/2, yHalfDist = (yMax - yMin)/2;
new Chart(document.getElementById('chart'), {
    type: "line",
    data: {
        datasets: [{
            data: [
                {x: xMin, y: yHalf},
                {x: xHalf, y:yHalf},
                {x: xHalfPlus, y: null},
                {x: xMax, y: null}
            ],
            fill: true,
            backgroundColor: "rgba(255, 160, 0, 0.5)",
            pointRadius: 0,
            showLine: false,
            stacked: true,
            order: 1
        }, {
            data: [
                {x: xMin, y: yHalfDist},
                {x: xHalf, y:yHalfDist},
                {x: xHalfPlus, y: null},
                {x: xMax, y: null}
            ],
            fill: "-1",
            backgroundColor: "rgba(0, 255, 255, 0.5)",
            pointRadius: 0,
            showLine: false,
            stacked: true,
            order: 2
        },
            {
            data: [
                {x: xMin, y: null},
                {x: xHalf, y: null},
                {x: xHalfPlus, y: yHalf},
                {x: xMax, y:yHalf}
            ],
            fill: true,
            backgroundColor: "rgba(255, 255, 0, 0.5)",
            pointRadius: 0,
            showLine: false,
            order: 1
        },
        {
            data: [
                {x: xMin, y: null},
                {x: xHalf, y: null},
                {x: xHalfPlus, y: yHalfDist},
                {x: xMax, y:yHalfDist}
            ],
            fill: "-1",
            backgroundColor: "rgba(0, 192, 160, 0.5)",
            pointRadius: 0,
            showLine: false,
            order: 2
        },
        {
            type: "bubble",
            data: [
                {x: 101, y: 97.2, r: 18, label: "ABCD"},
                {x: 102, y: 103.4, r: 11, label: "WEDW"},
                {x: 103, y: 102.2, r: 11, label: "CESA"},
                {x: 98, y: 101.4, r: 11, label: "QWEX"}
            ],
            backgroundColor: 'rgba(64, 64, 128, 0.7)',
            order: 0,
            label: "my data"
        }
    ]},
    options: {
        scales: {
            x: {
                type: "linear",
                min: xMin,
                max: xMax,
            },
            y: {
                min: yMin,
                max: yMax,
                stacked: true,
            }
        },
        plugins:{
            legend:{
                labels:{
                    filter(ctx){
                        // no legend for the four quadrants
                        if(ctx.datasetIndex < 4) return false;
                        return true;
                    }
                }
            },
            datalabels:{
                anchor:'center',
                align: 'center',
                color: '#000',
                clamp: true,
                font: {
                    weight: 'bold'
                },
                formatter: function(value) {
                    //console.log(value)
                    return value.label || ''
                },
            },
            annotation: {
                annotations: {
                    label1: {
                        type: 'label',
                        content: 'Lagging',
                        xValue: xMin,
                        yValue: yMin,
                        position:{x: "start", y: "end"},
                        color: 'rgba(0,0,0,0.6)',
                    },
                    label2: {
                        type: 'label',
                        content: 'Weakening',
                        xValue: xMax,
                        yValue: yMin,
                        position:{x: "end", y: "end"},
                        color: 'rgba(0,0,0,0.6)'
                    },
                    label3: {
                        type: 'label',
                        content: 'Improving',
                        xValue: xMin,
                        yValue: yMax,
                        position:{x: "start", y: "start"},
                        color: 'rgba(0,0,0,0.6)'
                    },
                    label4: {
                        type: 'label',
                        content: 'Leading',
                        xValue: xMax,
                        yValue: yMax,
                        position:{x: "end", y: "start"},
                        color: 'rgba(0,0,0,0.6)'
                    }
                },
                font: {
                    size: 22
                }
            }
        }
    }
});
<div style="width:900px; height: 700px">
    <canvas id="chart"></canvas>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.3.0/chart.umd.js" integrity="sha512-CMF3tQtjOoOJoOKlsS7/2loJlkyctwzSoDK/S40iAB+MqWSaf50uObGQSk5Ny/gfRhRCjNLvoxuCvdnERU4WGg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-datalabels/2.2.0/chartjs-plugin-datalabels.min.js" integrity="sha512-JPcRR8yFa8mmCsfrw4TNte1ZvF1e3+1SdGMslZvmrzDYxS69J7J49vkFL8u6u8PlPJK+H3voElBtUCzaXj+6ig==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-annotation/2.2.1/chartjs-plugin-annotation.min.js" integrity="sha512-qF3T5CaMgSRNrxzu69V3ZrYGnrbRMIqrkE+OrE01DDsYDNo8R1VrtYL8pk+fqhKxUBXQ2z+yV/irk+AbbHtBAg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用带有工具提示的 ChartJs 或 D3 创建 RRG(相对旋转图)? 的相关文章

  • 如何从 mysql 数据库中提取数据并使用 D3.JS 进行可视化?

    我有一个数据库MySQL我想在其中可视化D3 JS 为了做到这一点 首先我想parse中的数据JSON格式 然后编写一个基本代码 从数据库中提取数据并使用D3 JS 我环顾四周 但找不到我想要的东西 因为我是新手D3 JS 我怎样才能做到这
  • 设置 D3 力定向图

    致尊敬的读者 我对 javascript 相当陌生 我也遇到过这个问题 我正在尝试实现这个力导向图的修改版本 http mbostock github com d3 ex force html http mbostock github co
  • D3.js 从 file:/// 加载本地数据文件

    我知道D3 js支持使用XHR和JSONP加载数据文件requests https github com mbostock d3 wiki Requests 但就我而言 我将通过从文件系统双击 html 文件来运行它们 这将像file fo
  • Chart.js,设置最大值

    我正在制作雷达图Chart js 但它只会变得与其中的最大值一样大 我希望将其设置为标准最大值 因此范围是 0 到 100 您可以看到您在不同主题上的进度如何 有谁知道如何设置雷达图的最大范围值Chart js 我尝试添加一个设置为 100
  • 可以用vue-chartjs打印图表吗?

    我正在使用 vue chartjs 在网络应用程序上渲染图表 我知道如果您使用原始版本 您可以打印图表library https canvasjs com docs charts methods chart print 但是我不知道如何使用
  • 在调整窗口大小之前,ChartJS 不会在引导选项卡内绘制图表

    我正在使用 Bootstrap 的选项卡 每个选项卡内都带有 ChartJS 图表 但出现的一个问题是图表画布wont被绘制 直到我调整浏览器窗口的大小 最新的 Chrome 和 Firefox 都发生了这种情况 我一直在尝试不同的解决方案
  • svg / d3.js 矩形一侧的圆角

    我知道 svg 有一个内置函数可以做圆角 但我只需要在四个角中的 2 个上做圆角 我知道我可以在彼此之上绘制多个矩形来模仿这一点 但这看起来有点俗气 有什么方法可以使用剪辑或任何 d3 js 方法来做到这一点吗 现在我有一个水平条形图 其中
  • 如何使用 d3.js 沿 GeoJSON 路径对对象进行动画处理?

    我正在使用 D3 js 从 GeoJSON 文件生成并渲染路径 效果很好 但现在我想沿着该路径为对象设置动画 我知道如何使用 D3 和标准 SVG 来做到这一点 创建过渡并设置其持续时间 对于过渡的每一帧 使用 Complete 查找沿路径
  • 如何在 Chart.js 2 中设置轴的步长?

    我使用带有 3 个 Y 轴的 Chart js 创建了一个简单的折线图 https codepen io anon pen dZVgKw https codepen io anon pen dZVgKw 正如您所看到的 最后一个从 10 到
  • nvd3散点图中自定义无数据标签

    我正在尝试使用自定义消息而不是显示的 无可用数据 消息 我正在使用 nvd3 散点图 气泡图 我遇到了一个建议here https stackoverflow com questions 17458236 nvd3 showing empt
  • crossfilter - 计算具有属性的所有记录的百分比

    这是我的问题 我正在使用 python Flask 服务器从 mongo db 获取 json 数据 并在其中指定要导入的字段 此数据采用 json 格式 并且仅像这样获取 一旦通过 graphs js 中的 crossfilter 是否可
  • Chart.js 在初始化时设置活动段

    我正在使用 Chart js v2 并且尝试在加载图表时模拟圆环图上某个段的 悬停状态 因此看起来有一个部分已突出显示 我已经搜索和梳理了代码一天 但找不到一个好的方法来做到这一点 提前致谢 设置片段的悬停样式有点令人困惑 因为它没有真正记
  • 使用chart.js 的年龄金字塔图

    我正在尝试使用 Chart js 创建一个图表 如下所示 例如 https thebreadoflifeblog files wordpress com 2013 01 uk age pyramid png https thebreadof
  • 使用 pandas“to_csv”防止尾随零

    我正在尝试将 CSV 字符串导出到 D3 Web 应用程序 但是命令to csv坚持在数据中添加尾随 0 这会妨碍 D3 的正确使用 这是一个说明问题的最小示例 我的 简化的 数据框是 gt gt gt df pd DataFrame Al
  • d3.js:将样式应用于单行

    正在尝试可拖动网络 http bl ocks org mbostock 4566102并希望能够对不同的链接使用不同的颜色 当我注释掉这些行时 var link svg append g attr class link selectAll
  • 尝试将 SVG 绘制到画布上,为什么我的 SVG XML 被截断?

    我真正想做的就是将我喜欢的动态创建的 SVG 放入 PDF 中 目前通过 jsPDF 添加 SVG 不起作用 因此我尝试将它们转换为 PNG 以便尝试添加图像 这是 IE11 中的情况 客户端要求 如果我做 var lsvg d3 sele
  • D3js多个父节点

    我正在尝试 d3 和树布局 我认为是否可以创建具有两个根的树 我知道树只有一个根是规则 但也许有人有一些例子 这是一个Fiddle http jsfiddle net 2ob0drfk 1 显示我认为您正在寻找的内容 重要的代码就在底部附近
  • 如何使用 d3js v5 将 CSV 文件读入数组 [重复]

    这个问题在这里已经有答案了 我正在创建一个数据仪表板 该仪表板应允许用户指向其文件系统上的 CSV 文件 然后将其上传到仪表板以对其执行各种可视化操作 我正在使用一个很好的 d3js 示例进行可视化 但我发现的示例都不包含读取 CSV 文件
  • 同心放射圆 d3

    我有一个等距值的数组 我用它来绘制同心圆 我想使用一种散发效果 本质上是 一旦最外面的圆的值超过最大值 就将其删除 并在中心添加一个新的圆来补偿 我不确定如何操作数据集来删除和添加新圆圈
  • 脚本不会从nodejs应用程序中的ejs文件运行

    我正在尝试使用nodejs express mysql和ejs让网页显示图表 但我显然不明白ejs javascript等是如何工作的 我需要运行一个脚本来设置图表 来自 Chart js 模块 但它不会输出任何类型的图表 我尝试过的 将

随机推荐

  • 从 parse.com 检索图像

    我不知道这是否可能 但我认为这是可能的 但我不知道该怎么做 我只是想从 parse com 加载图像 就像从 parse com 检索对象一样 我应该像从 parse com 获取字符串一样进行操作吗 我刚刚找到了如何在解析时保存图像 但没
  • 如何制作输出目录选择面板?

    您好 我正在尝试制作一个窗格 在我的计算机中显示类似 Windows 资源管理器的内容 当用户完成操作后 当他想要将编辑后的图像保存在磁盘上的特定位置时 他可以轻松地从该窗格中选择目录 我想设计这样的东西 可以做类似的事情吗 我的图片编辑器
  • pandas pytables 附加:性能和文件大小的增加

    我有500多个PyTables每个存储大约包含 300Mb 的数据 我想使用 pandas 将这些文件合并到一个大商店中append如下面的代码所示 def merge hdfs file list merged store for fil
  • 如何将 ruby​​gem 条件要求添加到 gem 规范中?

    仅当用户使用特定版本的 ruby 时才可以添加 gem 依赖项吗 背景 我正在研究一个项目的分支使用 Test Unit Autorunner 等 它们是 ruby 1 8 中标准库的一部分 但不是 1 9 1 中标准库的一部分 而是位于
  • python 列表,向列表添加一些内容会改变整个内容?

    所以我试图在Python中实现选择排序 并且我将每次迭代的结果附加到一个列表中以在最后打印 我的代码正确地对数字列表进行排序 但是当我将它附加到最后的同一个列表中时更改所有其他列表 def s sort numbers alist do a
  • 计算出勤时间差

    我有一个包含以下示例输出的表格 UserID Checktime CheckStatus 3175 2013 12 22 07 02 10 000 I 3175 2013 12 22 13 01 01 000 O 3175 2013 12
  • 针对特定图像的 CSS

    我正在寻找一种使用 CSS 定位特定图像的方法 如果可能的话 我正在运行一个 CMS 用户可以在其中上传图像并将其放在他们的页面上 我想要一种定位具有特定尺寸的图像的方法 所以问题是 你可以让 css 行针对具有特定尺寸规格的图像或对象吗
  • 使用 LocalStorage 保存和加载购物车

    我有以下代码 inames iqtyp iprice function bestel inames push document getElementById artikel innerHTML iqtyp push parseInt doc
  • C - strtok(...) 上出现意外的分段错误

    我正在使用库的 strtok 它似乎工作正常 直到结束条件 它导致分段错误和程序崩溃 API 声称 当找不到更多标记时 strtok 将输出 NULL 这意味着 我认为 您必须捕获此 NULL 才能终止使用 strtok 运行的任何循环 我
  • Android 来电事件

    我想创建一个 onCall 事件 我已经知道没有这样的方法 但基本上我想做的是 当接到来电时 弹出 Toast 或其他任何内容 任何类型的教程或示例代码都会有帮助 多谢 Use PhoneStateListener它已经重写了方法onCal
  • 如何确定 ARM 处理器是运行在通常的锁定“世界”中还是运行在 Secore“世界”中?

    例如 virt what显示您是否在硬件虚拟化 沙箱 内运行 如何检测您是否在 ARM TrustZone 沙箱中运行 信任区也许与你想象的不同 有一系列模式 从 可信功能的简单 API 到在每个世界中运行的 双操作系统 如果该问题有更多背
  • Objective-C:正确保留 3 位小数

    我正在尝试将浮点值降低到小数点后第三位 例如 值 2 56976 应为 2 569 而不是 2 570 我搜索并找到了这样的答案 向下取小数点后两位数 这样的答案并不准确 例如代码 double value double unsigned
  • 序列化静态类?

    如果我们序列化静态类会发生什么 如果我们序列化静态类 是否可以创建多个静态类实例 Serializable public static class MyClass public static MyClass public static bo
  • PHP 用 vars 替换字符串中的通配符(%s、%d)

    我有翻译功能t var function t word return this gt words word where this gt words是数组 this gt words array word1 gt word word2 gt
  • 如何打印一年中的所有星期(或一年中的第一个星期一)

    如何打印从星期一开始到星期日结束的所有周 如下所示 使用 Zend date 1 04 Jan 2010 10 Jan 2010 2 11 Jan 2010 17 Jan 2010 3 18 Jan 2010 24 Jan 2010 首先找
  • MYSQL 选择往复数据?

    我有一张桌子叫Follow 具有三个字段 Id 自动增量整数 用户ID 整数 关注 整数 如果我有这样的数据 ID UserId Following 1 2 3 2 3 2 3 2 5 4 2 6 5 3 5 我如何找到用户 2 的朋友 即
  • Pandas groupby 然后应用 to_dict('records')

    假设我有以下数据框 df pd DataFrame a 1 1 1 2 b a a b c d 1 2 3 4 我想以下面的句子结束 1 b a d 1 b a d 2 b b d 3 2 b c d 4 基本上 我想分组a对于我想应用的每
  • 将 UTC 日期转换为当前时区

    我必须将这种格式 2016 09 25 17 26 12 的 UTC 日期转换为 Android 的当前时区 我这样做了 SimpleDateFormat simpleDateFormat new SimpleDateFormat yyyy
  • 在 Objective C 中读取 .doc (MS Word) 文件?

    是否可以在 ObjC 中读取 doc MSWord 文件 或者 还有其他方法可以读取word文件吗 Thanks 这取决于您的平台 iPhone 的富文本功能与 OS X 截然不同 UIWebView可以打开它们在 iPhone 上 在 M
  • 如何使用带有工具提示的 ChartJs 或 D3 创建 RRG(相对旋转图)?

    我想使用 ChartJS 或 D3Js 使用任何开源创建 RRG 我已经尝试过这个 但无法绘制象限分叉示例https codesandbox io s chart js forked m1zug2 期望应该如下所示 在此输入图像描述 您可以