当前位置: 首页 > 面试题库 >

无法对D3 v4中的对象使用attr

伏建修
2023-03-14
问题内容

我一直在尝试使用新的D3 v4将一个不错的D3图表示例转换为Angular2组件

但是,我得到了以下代码“无法读取null的属性文本”异常:

var textLabels = labelGroups.append("text").attr({
    x: function (d, i) {
        var centroid = pied_arc.centroid(d);
        var midAngle = Math.atan2(centroid[1], centroid[0]);
        var x = Math.cos(midAngle) * cDim.labelRadius;
        var sign = (x > 0) ? 1 : -1
        var labelX = x + (5 * sign)
        return labelX;
    },
    y: function (d, i) {
        var centroid = pied_arc.centroid(d);
        var midAngle = Math.atan2(centroid[1], centroid[0]);
        var y = Math.sin(midAngle) * cDim.labelRadius;
        return y;
    },
    'text-anchor': function (d, i) {
        var centroid = pied_arc.centroid(d);
        var midAngle = Math.atan2(centroid[1], centroid[0]);
        var x = Math.cos(midAngle) * cDim.labelRadius;
        return (x > 0) ? "start" : "end";
    },
    'class': 'label-text'
}).text(function (d, i) {      <--------------- exception
    return d.data.label;
});

labelgroups是一个选择,append应该起作用,因此它一定是.attr({})引起问题的原因。但是,它在jsfiddle中确实可以正常工作。D3 v4中的此语法是否已更改?怎么会正确呢?

谢谢!


问题答案:

在D3 v4(以及v5)中,不能使用对象设置attrstyle。为此,您必须引用迷你库D3-selection-multi:

<script src="https://d3js.org/d3-selection-multi.v0.4.min.js"></script>

之后,将您的代码从更改attrattrs(是,就像复数一样):

var textLabels = labelGroups.append("text").attrs({
    //mind the 's' here-------------------------ˆ
});

对样式执行相同操作:应styles为复数形式,而不是style

如果你不想改变这一切,根本就作为“常规”方式:套xytext-anchorclass在不同的attr



 类似资料:
  • 我正在尝试为我的PySpark笔记本提供Scala Xgboost API。以下是本博客:https://towardsdatascience.com/pyspark-and-xgboost-integration-tested-on-the-kaggle-titanic-dataset-4e75a568bdb但是,继续遇到以下错误: 我已经在谷歌上搜索了这个错误,并尝试了以下内容。我从这个博客上

  • 类以这种方式实例化: 代码如下:

  • 所以我试图绘制一些日期时间对象的直方图,但我永远无法让垃圾箱与酒吧对齐。我的代码如下: 我首先导入我的资料并声明开始、结束和一天对象: 然后我声明一个任意的日期列表: 然后,我将开始和结束之间的天数(在这种情况下是一周)添加到列表中: 这是因为一周中的一些日子没有出现在日期列表中(我知道我可以跳过这个例子,但我希望它可以扩展到其他日期列表)。 然后我用hist()绘图: 我尝试了各种不同1、范围和

  • 我在Microsoft Windows7上使用的是。我想在一个变量中加载csv文件,以便稍后执行与SQL相关的操作,但无法这样做。我从这个链接引用了公认的答案,但没有用。我按照以下步骤创建对象和对象: 当我尝试时,它会说没有找到df。我尝试了从附加链接加载CSV的databricks解决方案。它下载软件包,但不加载csv文件。那么我怎样才能纠正我的问题呢?提前致谢:)

  • 关于堆栈溢出的第一个问题!我觉得这一定是Java初学者的一个常见问题。但我已经尝试了几个小时,一直没有找到解决办法。我认为可以通过这种方式访问对象属性。 起初,我认为实际上是一个对象数组,所以当我创建对象数组时,我在构造函数中使用了一个对象数组。我立即解决了这个问题,但这个问题仍然存在。 它甚至更烦人,因为在调试模式下,我可以看到及其属性中的。看着Eclipse嘲笑我。

  • 我试图在angular 2模板中显示一个对象值,特别是当我试图使用ngFor获得一个对象数组时,会给我一个错误 这是我的模型