d3-cloud 的打字

2023-11-23

我想用d3-cloud在我的 Angular2 应用程序中生成词云。但是,我无法找到要安装的正确类型。我试过this但是当我尝试将其导入到我的组件中时,它不起作用。我不断收到错误“在类型中找不到属性布局”。有人可以帮我解决这个问题吗?


我想出了如何做到这一点。不是正确的 Typescript 方式,而是使用后备 JS 方式。您可以这样做:

  1. import像往常一样使用 d3 库,但给它一个别名:import * as D3 from 'd3';(注:D3为大写D)
  2. declare再次 d3,以便您可以将其用于 WordCloud:declare let d3: any;
  3. Use D3有关父 d3 库的所有内容以及d3仅用于词云生成。

d3-cloud 的输入似乎不起作用。所以declareing 似乎是目前唯一的办法。

完整代码:

词云.component.ts:

import { Component, Input, ElementRef, DoCheck, KeyValueDiffers } from '@angular/core';
import { WordCloudConfig } from '../../../models/charts/word-cloud-config';
import * as D3 from 'd3';

declare let d3: any;

@Component({
  selector   : 'word-cloud',
  templateUrl: './word-cloud.component.html',
  styleUrls  : ['./word-cloud.component.scss']
})
export class WordCloudComponent implements DoCheck {

  @Input() config: WordCloudConfig;

  private _host;              // D3 object referencing host DOM object
  private _svg;               // SVG in which we will print our chart
  private _margin: {          // Space between the svg borders and the actual chart graphic
    top: number,
    right: number,
    bottom: number,
    left: number
  };
  private _width: number;      // Component width
  private _height: number;     // Component height
  private _htmlElement: HTMLElement; // Host HTMLElement
  private _minCount: number;   // Minimum word count
  private _maxCount: number;   // Maximum word count
  private _fontScale;          // D3 scale for font size
  private _fillScale;          // D3 scale for text color
  private _objDiffer;

  constructor(private _element: ElementRef, private _keyValueDiffers: KeyValueDiffers) {
    this._htmlElement = this._element.nativeElement;
    this._host = D3.select(this._element.nativeElement);
    this._objDiffer = this._keyValueDiffers.find([]).create(null);
  }

  ngDoCheck() {
    let changes = this._objDiffer.diff(this.config);
    if (changes) {
      if (!this.config) {
        return;
      }
      this._setup();
      this._buildSVG();
      this._populate();
    }
  }

  private _setup() {
    this._margin = {
      top   : 10,
      right : 10,
      bottom: 10,
      left  : 10
    };
    this._width = ((this._htmlElement.parentElement.clientWidth == 0)
        ? 300
        : this._htmlElement.parentElement.clientWidth) - this._margin.left - this._margin.right;
    if (this._width < 100) {
      this._width = 100;
    }
    this._height = this._width * 0.75 - this._margin.top - this._margin.bottom;

    this._minCount = D3.min(this.config.dataset, d => d.count);
    this._maxCount = D3.max(this.config.dataset, d => d.count);

    let minFontSize: number = (this.config.settings.minFontSize == null) ? 18 : this.config.settings.minFontSize;
    let maxFontSize: number = (this.config.settings.maxFontSize == null) ? 96 : this.config.settings.maxFontSize;
    this._fontScale = D3.scaleLinear()
                        .domain([this._minCount, this._maxCount])
                        .range([minFontSize, maxFontSize]);
    this._fillScale = D3.scaleOrdinal(D3.schemeCategory20);
  }

  private _buildSVG() {
    this._host.html('');
    this._svg = this._host
                    .append('svg')
                    .attr('width', this._width + this._margin.left + this._margin.right)
                    .attr('height', this._height + this._margin.top + this._margin.bottom)
                    .append('g')
                    .attr('transform', 'translate(' + ~~(this._width / 2) + ',' + ~~(this._height / 2) + ')');
  }

  private _populate() {
    let fontFace: string = (this.config.settings.fontFace == null) ? 'Roboto' : this.config.settings.fontFace;
    let fontWeight: string = (this.config.settings.fontWeight == null) ? 'normal' : this.config.settings.fontWeight;
    let spiralType: string = (this.config.settings.spiral == null) ? 'rectangular' : this.config.settings.spiral;

    d3.layout.cloud()
      .size([this._width, this._height])
      .words(this.config.dataset)
      .rotate(() => 0)
      .font(fontFace)
      .fontWeight(fontWeight)
      .fontSize(d => this._fontScale(d.count))
      .spiral(spiralType)
      .on('end', () => {
        this._drawWordCloud(this.config.dataset);
      })
      .start();
  }

  private _drawWordCloud(words) {
    this._svg
        .selectAll('text')
        .data(words)
        .enter()
        .append('text')
        .style('font-size', d => d.size + 'px')
        .style('fill', (d, i) => {
          return this._fillScale(i);
        })
        .attr('text-anchor', 'middle')
        .attr('transform', d => 'translate(' + [d.x, d.y] + ')rotate(' + d.rotate + ')')
        .attr('class', 'word-cloud')
        .text(d => {
          return d.word;
        });
  }

}

word-cloud.component.html:

<ng-content></ng-content>

词云.component.scss:

.word-cloud {
  cursor                : default;
  -webkit-touch-callout : none;
  -webkit-user-select   : none;
  -khtml-user-select    : none;
  -moz-user-select      : none;
  -ms-user-select       : none;
  user-select           : none;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

d3-cloud 的打字 的相关文章

  • 分配函数后如何删除 onmouseout 事件?

    我有一个问题 我正在为 onmouseout 事件分配一个函数 但运行该事件后 我需要将其删除 将非常感谢您的帮助 这取决于你的代码 如果你用 d3 这样做 那么你可以说 在 onmouseout 事件函数中 element on mous
  • 反转比例函数

    这对我来说很有趣 看下面的D3代码 var scale d3 scale linear domain 100 500 range 10 350 scale 100 Returns 10 scale 300 Returns 180 scale
  • 在请求标头中设置 Cookie Angular2

    我是 angular2 的新手 我的服务器 spring 在其响应标头中使用 set cookie 值来响应身份验证 如何将该 cookie 设置为下一次 API 调用的请求标头 我搜索了很多 但找不到合适的解决方案 作为http get
  • 三-mtl-loader 错误:THREE.MeshPhongMaterial:.shading 已被删除 -> 对象不可见

    昨天我问了这个问题 未捕获的类型错误 THREE MTLLoader 不是构造函数 2 0 https stackoverflow com questions 47741644 uncaught typeerror three mtlloa
  • 如何向离子推送通知添加操作按钮?

    我想向离子推送通知添加一些操作按钮 我正在使用科尔多瓦pushv5 通知工作正常 但我不知道如何添加这些按钮 如何添加这些按钮 应在 POST 请求中添加操作按钮 registration ids my device id data tit
  • TypeScript 循环元组数组

    如何在 TypeScript 中循环元组数组 例如 for const x y of a 1 b 2 y 1 抱怨 error TS2365 Operator cannot be applied to types string number
  • Typescript:理解并集和交集类型

    我试图在打字稿中获得关于并集和交集类型的直觉 但我无法弄清楚这种情况 interface A a number interface B b boolean type UnionCombinedType A B type Intersecti
  • Webpack 在 Angular 的 ng 服务中的作用

    我是 Angular 的新手 想知道当我们为应用程序提供服务时 Webpack 在幕后扮演什么角色 在最初的印象中 我开始知道 webpack 是一个构建和打包工具 它将所有必需的 JS 文件分组到单独的包中 然而 我无法找到 webpac
  • TypeScript 0.9.5:如何定义具有静态成员的接口和实现它的类?

    这用于在 TypeScript 0 9 1 1 中编译 省略方法实现 module MyNodule export interface ILocalStorage SupportsLocalStorage boolean SaveData
  • 获取“回调 URL 与 Auth0 不匹配”

    我有一个 Auth0 客户端 配置了以下回调 URL http 本地主机 4200 http localhost 4200 我可以正常登录 问题是当我导航到应用程序中的某个 URL 时 http localhost 4200 places
  • 如何在 inversify 中注入异步依赖?

    我有 TypeScript 应用程序并且正在使用反转 http inversify io 对于国际奥委会 我有一个连接类 use strict import injectable from inversify import createCo
  • 无法在 .tsx 文件中导入 CSS 模块

    我正在使用 typescript 构建基本的 React 应用程序 但无法导入 CSS 文件索引 tsx file 我能够导入索引 css文件如下 import index css this import gives typescript
  • 如何在 TypeScript 中禁用/抑制库中的错误?

    我打开了一些编译器开关来报告代码中的更多问题 例如严格的空检查 但我在使用的库中遇到了数十个错误 例如 default xxx node modules angular core src util decorators d ts 11 5
  • 避免在 Angular 2+ 中嵌套订阅?

    我有2个端点 1 个端点来获取当前用户的日志 1 个端点来获取该用户的授权 实际上我使用 this user subscribe e gt this grants get e subscribe x gt console log x 但这是
  • 如何使用 Angular 2 动画实现翻转效果?

    我一直在我的项目中使用纯CSS翻转卡片 但这个解决方案不是合适的 有人可以通过点击按钮来呈现角度 2 的翻转吗 我在 angularjs 中找到了一个https codepen io Zbeyer pen oXQrZg https code
  • 在 Angular 中深度复制对象

    AngularJS 有angular copy 深度复制对象和数组 Angular 也有类似的东西吗 您还可以使用 JSON parse JSON stringify Object 如果它在你的范围内 那么它就存在于每个 Angular 组
  • 在 Angular 9 应用程序的生产中同时使用 AOT 和 JIT

    因此 我一直在构建一个 Angular 9 应用程序 其中有一个客户仪表板来管理保存在服务器上的模板 这些模板可以通过激活系统在不同的设备上查看 因此设备与用户绑定 所以让我们说https templates com我们有 login da
  • 第二个函数参数的条件类型

    我有以下功能 function doSomething param1 string param2 string return param1 param2 我也有基于 json 的类型 其结构看起来与此类似 a1 b1 something1
  • Angular 停止 Enter 键提交

    I am trying to stop the Enter from submitting my button and rather make it point to another function I tried trapping th
  • 角度 4 单击按钮功能未触发

    我正在尝试检查文本输入是否为空或不在角度 4 中 我没有为此使用表单 这只是一个输入字段 当我在下面的按钮中执行 addLocaton 函数时 需要进行检查 我的输入字段

随机推荐

  • Office Open XML 中的 之间有什么区别?

    这两个 Office Open XML 片段有什么区别
  • android Camera2 API + TextureView 覆盖用于在相机预览上绘图

    因此 我需要覆盖camera2预览并通过在顶部分层透明覆盖层在预览视频图像上绘制一个矩形 我从这里开始使用基本的 Camera2 代码 https github com googlesamples android Camera2Basic
  • 如何在 DT::datatable 中使用服务器端处理?

    我正在使用 DT datatable 来可视化 R markdown 文件中的表 R markdown file library DT r viewdata this is an example but my actual dataset
  • 如何将 hashMap 与 JTable 一起使用

    我有一个 hashMap 我希望在 JTable 中查看它的数据 但我在获取 hashMap 的列和行数量以及要显示的数据时遇到了麻烦 我有一个 hashmap 它以 accountID 作为键和一个学生的对象 其中每个学生都有自己的数据
  • SwiftUI 在圆角矩形内屏蔽一个矩形

    你好呀 我想知道 在 SwiftUI 中 如何屏蔽圆角矩形的内容 以便子矩形剪掉角 在我的示例中 我在 zstack 上有一个白色圆角矩形和一个粉色矩形 我尝试应用剪切 但粉色矩形不符合边角 我尝试将 mask 应用于白色矩形 但它给出了与
  • 无法在 pthread_create 函数中将 '*void(MyClass::*)(void*) 转换为 void*(*)(void*)

    我正在尝试使用 CameraManager 类创建一个新线程 但出现以下错误 无法在 pthread create 函数中将 void CameraManager void 转换为 void void 我在cameramanager h文件
  • 如何将继承的对象字符串化为 JSON?

    使用 JSON stringify 时 json2 js 似乎忽略了父对象的成员 例子 require json2 js function WorldObject type this position 4 function Actor va
  • 可以使用单例 DAO 对象吗?

    考虑以下类的结构 BaseDAO使用方法来创建PreparedStatement并从池中获取连接 AccountDAO extends BaseDAO跟 共事Account通过 JDBC 的表 这个类是单例类 AccountService女
  • 我如何知道 jQuery 是否有待处理的 Ajax 请求?

    我在使用我们制作的 jQuery 控件时遇到一些问题 假设您有一个下拉列表 允许您输入要查找的项目的 ID 当您按 ENTER 或在文本框中失去焦点时 它会通过 jQuery 验证您输入的 ID 是否正确 如果不正确则显示警报 t 问题是
  • 无法通过 PDO_ODBC 从 Access 检索 UTF-8 重音字符

    我正在尝试将 Access DB 转换为 MySQL 一切都很完美 除了一把大活动扳手之外 如果访问数据库有任何非标准字符 它将无法工作 我的查询会告诉我 Incorrect string value xE9d 如果我直接回显具有 无效 字
  • 创建名称助手,将名字和姓氏分开

    我正在寻找一些有关如何获取属性并通过方法处理它以返回不同内容的帮助 但我以前从未这样做过 而且不知道从哪里开始 我想尝试将 name string 属性从 George Washington 或 John Quincy Adams 更改为仅
  • ASP.NET 5 EntityFramework.Core 7.0.0-rc1-final 问题 - 编译器希望引用 7.0.0.0,但未找到

    我有同样的问题 我在我的中添加了以下依赖项project json file dependencies EntityFramework 7 0 0 beta4 EntityFramework Core 7 0 0 rc1 final Ent
  • Android 获取缓存大小的方法

    我在我的测试应用程序中使用 fedor 的延迟加载列表实现 只需单击一个按钮即可清除缓存 如何获取列表视图中加载图像的缓存大小并以编程方式清除缓存 以下是保存缓存图像的代码 public ImageLoader Context contex
  • 理解记忆障碍

    我正在尝试在对 java 无锁程序员有用的级别上理解内存屏障 我认为 这个级别介于学习易失性和从 x86 手册中学习存储 加载缓冲区的工作之间 我花了一些时间阅读了很多博客 食谱 并得出了下面的摘要 有知识渊博的人可以看一下摘要 看看我是否
  • 如何将相对布局设置为默认布局

    我通常在大部分活动中使用相对布局 我想让 Android studio 在创建新活动时默认创建相对布局 而不是约束布局 有没有办法做到这一点 右键单击布局文件夹 gt 新建 gt 编辑文件模板 打开一个对话框 转到 其他 选项卡 更改内容
  • C++11 从频繁变化的范围生成随机数

    问 如何从先验未知范围生成 许多 均匀分布的整数 就性能而言 生成数百万个数字 首选方式是什么 上下文 在我的应用程序中 我必须在许多地方生成许多伪随机数 我对生成器使用单例模式来保持应用程序运行的可重复性 在我的例子中 分布总是均匀的 但
  • 使用 jquery 动态创建元素

    我正在尝试使用 jquery 创建元素 当我单击链接时 我想创建一个元素 p 给它一些文本 然后将其放入我的一个 div 中 另外 我想检查点击了哪个链接 这样我就可以将创建的 p 放在右侧的 div 中 关于我做错的地方有什么解决方案吗
  • 为什么新样式类和旧样式类在这种情况下有不同的行为?

    我发现了一些有趣的东西 这是一段代码 class A object def init self print A init def del self print A del class B object a A 如果我运行这段代码 我将得到
  • Android 图像滤镜库

    是否有适用于 Android 的图像库 如http www jhlabs com ip filters index html 或者有人移植过同样的东西吗 提前致谢 我知道这是一个老话题 但在没有 AWT 库的情况下 我已经开始移植一些图像滤
  • d3-cloud 的打字

    我想用d3 cloud在我的 Angular2 应用程序中生成词云 但是 我无法找到要安装的正确类型 我试过this但是当我尝试将其导入到我的组件中时 它不起作用 我不断收到错误 在类型中找不到属性布局 有人可以帮我解决这个问题吗 我想出了