防止 D3 中的文本剪切(Javascript 图表)

2023-12-03

我正在 D3 中绘制饼图,但文​​本剪辑本身遇到问题:

enter image description here

这是我的绘图函数:

    pie: function(config)
    {
        var width = config.width || 840,
            height = config.height || 520,
            radius = Math.min(width, height) / 2;

        var color = this._color = d3.scale.ordinal().range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56", "#d0743c", "#ff8c00"]);
        var arc = d3.svg.arc().outerRadius(radius - 10).innerRadius(0);
        var pie = d3.layout.pie().sort(null).value(function(d) { return d.value; });

        var svg = d3.select("body").append("svg").attr('id', config.id || 'chart').attr("width", width).attr("height", height)
                    .append("g").attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

          var g = svg.selectAll(".arc").data(pie(config.data)).enter().append("g").attr("class", "arc");
          g.append("path").attr("d", arc).style("fill", function(d) { return color(d.data.name); });

          g.append("text")
              .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
              .attr("dy", ".35em")
              .style("text-anchor", "middle")
              .text(function(d) { return d.data.name; });
        return $('#'+(config.id || 'chart'));
    },

有没有一种简单的方法来防止这种文本剪切?


Update: 看答案D3 如果有足够的空间,在饼图中放置圆弧标签以获得更全面的答案。


If by 避免削波你的意思是<text>元素不应被随后的遮挡arc,那么这可以通过使<text>元素出现在.arcDOM 中的元素。这里显示了一种方法:http://jsfiddle.net/tu3Pk/2/

在这里,我创造了一个新鲜的g.arc-labels包含标签并出现在 DOM 中的元素g.arcs.

pie: function (config) {

    // ...

    var g = svg.selectAll(".arc")
            .data(pie(config.data))
          .enter()
            .append("g")
            .attr("class", "arc");

    g.append("path")
        .attr("d", arc)
        .style("fill", function(d) { 
            return color(d.data.name); 
        });

    // Creating a new g for labels
    var gLabel = svg.selectAll('.arc-label')
                  .data(pie(config.data))
                .enter()
                  .append('g')
                  .attr('class', 'arc-label');

    gLabel.append("text")
        .attr("transform", function(d) { 
              return "translate(" + arc.centroid(d) + ")"; 
        })
        .attr("dy", ".35em")
        .style("text-anchor", "middle")
        .text(function(d) { return d.data.name; });

    // ...
}

然而,这对易读性没有多大帮助。为了使标签更清晰,您可能需要看一下以下问题:防止 D3 饼图中文本重叠在这种情况下,解决方案如下:http://jsfiddle.net/tu3Pk/3/

// Get the angle on the arc and then rotate by -90 degrees
function getAngle(d) {
    var ang = (180 / Math.PI * (d.startAngle + d.endAngle) / 2 - 90);
    return (ang > 180) ? 180 - ang : ang;
};

// ...

pie: function (config) {

    // ...

    gLabel.append("text")
        .attr("transform", function(d) { 
              return "translate(" + arc.centroid(d) + ") " +
                     "rotate(" + getAngle(d) + ")";
        })
        .attr("dy", ".35em")
        .style("text-anchor", "middle")
        .text(function(d) { return d.data.name; });

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

防止 D3 中的文本剪切(Javascript 图表) 的相关文章

随机推荐

  • 从请求对象/表单集合获取数据时,对象引用未设置为对象的实例

    我正在尝试使用 MVC Ajax 实现一个简单的添加操作 我的代码如下 Public Class Model public int number1 get set public int number2 get set HttpPost pu
  • 使用querySelectorAll更改多个元素的样式属性

    我有以下函数 触发时将使 DIV 变得半透明 function changeOpacity el var elem document getElementById el elem style transition opacity 0 5s
  • 用于启动应用程序的Appium-Activity不存在或无法启动!确保它存在并且是可启动的活动

    我正在尝试使用 appium 运行在 eclipse 上创建的测试文件 当我在连接到系统的真实 Android 设备上执行测试时 出现以下错误 运行命令时遇到内部错误 错误 启动应用程序时发生错误 原始错误 用于启动应用程序的 Activi
  • 从文档中检索单个属性

    今天是个好日子 假设我们有一个集合和一个文档 如下所示 test doc ID 123 a x y 2000 z 1000 x var y 3500 z
  • 如何使用 Swift 调试 SceneKit 中的自定义几何体

    我正在尝试学习如何在 SceneKit 中创建自定义几何体 但是 我尝试制作一个三角形 但它没有显示任何内容 我不知道如何调试这个 有没有办法判断三角形是否有效 我只是不知道从哪里开始 作为参考 相关的游乐场代码如下 请注意 它是针对 Sw
  • 代码中的 WCF 跟踪不遵循 MessageLogging 设置

    我需要在我的应用程序中使用 WCF 跟踪 但需要尽可能通过代码进行控制 建议我在 app config 文件中安装以下部分
  • 无法从 Angular ui-view 内部访问 JavaScript

    我有一个带有 Angular ui 视图的主模板 index html 在这个主模板中 我导入了一堆 Javascript 文件 我希望这些文件可用于将在 ui view 中加载的 html 模板内的内容 但 JS 函数似乎无法访问 sam
  • React.Component 和 Component 之间有什么区别?

    我见过两种访问方式Component import React from react class Foo extends React Component and import React Component from react class
  • 在页面加载时动画滚动到 ID

    我正在尝试在页面加载时将滚动动画设置为特定 ID 我做了很多研究并发现了这一点 html body animate scrollTop title1 height 1000 但这似乎是从ID开始并动画到页面顶部 HTML 位于页面的中间 很
  • JDialog 允许用户仅更改对话框的宽度

    有谁知道是否可以限制用户调整 JDialog 大小的方式 我知道我可以调用方法 setResizible boolean 并禁用或允许用户调整 JDialog 的大小 但是有没有办法限制用户更改窗口的高度但允许他更改宽度 如果我创建的对话框
  • 如何正确实现从 iOS 应用程序到 watchOS2 并发症的设置传输

    我想要实现的目标如下 并发症以 30 为间隔在后台更新 分钟 每当手表应用程序运行时 并发症都会更新 并且 接收自己的更新数据 并发症随时更新 iOS 应用程序运行并且用户更改了影响的设置 观察数据 例如天气观测位置的变化 或 显示单位 第
  • Nodejs AWS SDK S3 生成预​​签名 URL

    我正在使用 NodeJS AWS SDK 生成预签名的 S3 URL 该文档给出了生成预签名 URL 的示例 这是我的确切代码 省略了敏感信息 const AWS require aws sdk const s3 new AWS S3 AW
  • 使用变量设置 Dask Worker

    我想在工作人员加载时分发一个更大的对象 或从磁盘加载 并将其放入全局变量 例如calib data 这对 Dask 工作人员有用吗 好像是客户端方法注册工人回调在这种情况下可以做你想做的事 你仍然需要某处放置你的变量 因为在 python
  • 如何在Python中删除文件或文件夹?

    如何在Python中删除文件或文件夹 使用以下方法之一 pathlib Path unlink 删除文件或符号链接 pathlib Path rmdir 删除一个空目录 shutil rmtree 删除目录及其所有内容 在 Python 3
  • 在 Google Tasks API 中使用 Joda-Time 库将字符串转换为日期时间格式

    我有一个日期 时间字符串需要发送到 Google Tasks API 但我不知道如何转换乔达时间图书馆DateTime对象转换为 Java DateTime 对象 我使用 Android 作为平台 该字符串以 2012 07 19 22 0
  • 数组:每个键存储多个值

    我曾经尝试使用相同的键添加两个值 但它不起作用 它超越了旧的价值 是否可以使用相同的键添加多个值 并且在按键检索时 我会得到一个链接列表 我可以迭代该列表以获取所有不同的值 最简单的选择 无论您使用什么地方 array key 替换为 ar
  • Python:获取 URL 路径部分

    如何从 url 获取特定路径部分 例如 我想要一个对此进行操作的函数 http www mydomain com hithere image 2934 并返回 这里 或对此进行操作 http www mydomain com hithere
  • Azure 移动服务 Web Api 上的 SignalR CORS

    我有一个运行 Web Api 和 c 的 Azure 移动服务 并按照中的建议启用了 CORS在 Azure 移动服务 NET 后端启用 CORS然而我现在开始将 SignalR 添加到其中 SignalR 工作正常 但我无法找到如何启用
  • 触发器中的 pragmaautonomous_transaction

    我在一个表上编写了一个触发器 该触发器根据条件从其他表中删除数据 触发器具有 pragmaautonomous transaction 并且触发器按预期工作 但是 我确实想知道将来是否会出现任何问题 比如说数据是否由多个用户 源同时插入等等
  • 防止 D3 中的文本剪切(Javascript 图表)

    我正在 D3 中绘制饼图 但文 本剪辑本身遇到问题 这是我的绘图函数 pie function config var width config width 840 height config height 520 radius Math m