用于自定义图例的 Angular ngx-charts 选项?

2023-12-27

我目前正在使用 Angular2 的 ngx-charts,我想自定义一些图例,例如将图例放在图表下方,或重命名图例字段,或使图例更宽(部分文本被截断......)等。

有什么好的选项来自定义图例吗?或者这通常是不可能的,或者最好的方法是什么? 目前,我的图表图例如下所示:

有些图例太宽,有些被切断,我想将图例放置在图表下方......


图例位置

要将图例放置在图表下方,您可以使用legendPosition input:

<ngx-charts-chart [legendPosition]="'below'" [results]="chartData" [legend]="true"></ngx-charts-chart>

唯一的选择是legendPosition是“右侧”(默认)和“下方”。

重命名图例字段

似乎没有用于自定义图例字段的选项(高级饼图中有一个更可自定义的图例,但您的示例是其他类型的图表。)我认为最好的解决方法是将字段标题传递到您的图表数据中chartData[i].name与您希望在图例中显示的值完全相同,然后自定义工具提示以在其中显示不同的字段名称。

此答案概述了如何自定义工具提示。 https://stackoverflow.com/a/51612764/10812434从那里,我将一个示例与折线图放在一起,除了具有不同的字段名称之外,该示例看起来像默认工具提示:

<ngx-charts-line-chart [legendPosition]="'right'" [results]="chartData" [legend]="true">
    <ng-template #tooltipTemplate let-model="model">
        <xhtml:div class="area-tooltip-container">
            <span class="tooltip-label">{{ formatFieldName(model.series) }} • {{ formatXvalue(model.name) }}</span>
            <span class="tooltip-val">{{ formatYvalue(model.value) }}</span>
        </xhtml:div>
    </ng-template>
    <ng-template #seriesTooltipTemplate let-model="model">
        <xhtml:div class="area-tooltip-container">
            <xhtml:div *ngFor="let tooltipItem of model" class="tooltip-item">
                <span class="tooltip-item-color" [style.background-color]="tooltipItem.color">
                </span>
                {{ formatFieldName(tooltipItem.series) }}: {{ formatYvalue(tooltipItem.value) }}
            </xhtml:div>
        </xhtml:div>
    </ng-template>
</ngx-charts-line-chart>

更改图例宽度

图例宽度的计算公式为ngx-charts-chart其他图表扩展的组件。它将宽度设置为图表容器的大约 1/6 或 1/12,具体取决于您的数据类型。无法为此图例输入不同的宽度,因此最简单的解决方案是设置legendPosition当自动宽度不适合您时,将其设置为“低于”。

但是,您不需要使用图表中内置的图例!这是一个更复杂(但更可微调)的替代方案:set[legend]="false"在你的图表中,然后添加一个新的ngx-charts-legend图表外部的组件。

您可以为此外部图例输入宽度和高度,或者将其包装在一个 div 中,以更灵敏地处理大小调整。使用后一种方法时,我必须将图例的宽度设置为其容器的 100%。

要使此解决方案正常工作,您必须将外部图例激活事件绑定到图表,并在 onInit 上设置一些图例输入属性。在包含图表的组件中,您将需要如下内容:

import { ColorHelper } from '@swimlane/ngx-charts';
...
export class ChartContainerComponent implements OnInit {
    public activeEntries: any[];
    public chartData: { name: string, series: { name: string, value?: string | number }[] }[];
    public chartNames: string[];
    public colors: ColorHelper;
    public colorScheme = { domain: ['#0000FF', '#008000'] }; // Custom color scheme in hex

    public legendLabelActivate(item: any): void {
        this.activeEntries = [item];
    }

    public legendLabelDeactivate(item: any): void {
        this.activeEntries = [];
    }

    public ngOnInit(): void {
        // Get chartNames
        this.chartNames = this.chartData.map((d: any) => d.name);
        // Convert hex colors to ColorHelper for consumption by legend
        this.colors = new ColorHelper(this.colorScheme, 'ordinal', this.chartNames, this.colorScheme);
    }

然后我的模板(图表和图例各占一半宽度)如下所示:

<div fxLayout="row">
    <div fxFlex="50%">
        <ngx-charts-line-chart [legend]="false" [activeEntries]="activeEntries" [results]="chartData" [scheme]="colorScheme"></ngx-charts-line-chart>
    </div>
    <div fxFlex="50%">
        <ngx-charts-legend fxFlex="100%" class="chart-legend" [data]="chartNames" [title]="'Legend Title'" [colors]="colors" (labelActivate)="legendLabelActivate($event)" (labelDeactivate)="legendLabelDeactivate($event)"></ngx-charts-legend>
    </div>
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于自定义图例的 Angular ngx-charts 选项? 的相关文章

随机推荐

  • Jenkins“错误 403 请求中未包含有效的面包屑”

    我正在尝试使用以下命令通过 Windows 计算机的发布请求触发 Jenkins 构建 首先 我使用以下方法获取面包屑 curl http JENKINS URL crumbIssuer api xml xpath crumb 回复是这样的
  • 重用其他文件中的 XML 元素

    是否可以在另一个 XML 中使用其他文件中的 XML 元素 例如 而不是
  • Symfony 序列化器问题 - NotNormalizedValueException

    当我在 Symfony 4 1 中使用带有 FOSRestBundle 的序列化器时遇到问题 我有以下错误消息 无法规范化 App Entity Youp 类型的对象 未找到支持规范化器 Symfony Component Serializ
  • 用于检查进程是否正在运行的 shell 脚本

    发生了一些奇怪的行为 让我觉得可能发生了一些事情 所以我有一个由 cron 执行的 shell 脚本 基本上它是为了检查 Node js 是否正在运行 如果是这样 请记录日期 如果不是 则不记录任何内容 在我构建它时 我测试了它并看到它在节
  • Google Speech-to-text API,InvalidArgument:400 必须使用单通道(单声道)

    我不断收到此错误InvalidArgument 400在 google Speech to text 中 问题似乎是我使用 2 通道音频 立体声 并且 API 正在等待 单声道 中的 wav 如果我在音频编辑器中转换文件 它可能会起作用 但
  • Google 字体无法在 Safari 上运行

    我正在努力让我的网站在 Safari 和 Chrome 下看起来相同 在 Chrome 中 它看起来正是我想要的样子 主要问题是 Google Font 似乎无法在 Safari 下加载 因为我使用的是 Google Font 网站上给出的
  • 如何在 JavaFx 中设置 svgPath 的大小

    我有一个包含 ListCells 的 ListView 其中包含由 SvgPath 定义的图标 private class CustomCell extends ListCell
  • Perl 中的配置文件处理

    CPAN 上的 Config 命名空间中有很多模块 但它们都受到某种方式的限制 我目前正在使用配置 标准 http search cpan org perldoc Config Std 这在大多数情况下都很好 但是它使某些事情变得困难 超过
  • Laravel 5.6 存储链接已存在,但尝试从公共文件夹获取文件时出现 404 错误

    我使用以下命令创建了一个符号链接 php artisan storage link 然后我创建了一个文件storage app public 根据文档 我可以通过以下方式获取该文件的链接 asset storage file txt htm
  • 如何使用lxml创建文本节点?

    我使用 lxml 和 python 来操作 xml 文件 我想创建一个最好没有标签的文本节点 而不是创建一个新的Element然后向其附加文本 我怎样才能做到这一点 我可以在中找到与此等效的内容xml dom minidompython 的
  • Proguard 和 R8 有什么区别?

    新版本的 Android Studio 3 4 刚刚发布 默认支持 R8 而不是 Proguard 有人可以解释一下两者之间的主要区别以及使用 R8 的任何明显好处吗 Android 构建过程的历史不断变化 开发人员不断尝试使其在构建时间和
  • 如何强制 iOS 立即更改背景颜色?

    有什么方法可以立即更改窗口的背景颜色吗 我需要一个闪烁的背景 即红 绿以一秒的间隔闪烁 正如我所见 背景颜色不会立即改变 而是仅在功能保留时才改变 有没有办法强制系统立即更改它并重绘窗口背景 void viewDidLoad super v
  • @将较少文件导入到有限范围内

    我想从另一个 less 文件导入所有样式 但范围有限 我正在尝试这个 我的网站 less wrapper class import path to styles less 但这根本不起作用 我使用基于浏览器的 less js 选项 并且可以
  • php 全局修剪 $_post

    你能修剪所有 POST 变量吗 因为我现在有一个很长的清单来修剪每个变量 看起来很不专业 我认为修剪 POST 也许会起作用 但没有 你可以这样做array map http php net array map POST array map
  • 如何修复 Android Studio 中的 VectorDrawableCompat 配置错误?

    我在 Android studio 中创建了一个项目 即使不修改项目中的任何单个字符 我也无法运行它 它给出以下错误 java lang RuntimeException 无法启动活动 组件信息 com kk myapplication c
  • 交集完成后,数组中的顺序是否保留?

    当我对两个数组进行交集时 是否可以保证结果顺序基于第一个数组的顺序 例如 如果我有 a 1 2 3 b 3 2 1 could a b return 3 2 1 代替 1 2 3 这是我所期望的 我在 RDoc 或 Pickaxe 的 Ar
  • 如何以编程方式调用 maven-resources-plugin

    我正在编写一个自定义 Maven 插件 该插件的部分工作是过滤复制一些资源 我写的代码如下所示 CopyResourcesMojo rm new CopyResourcesMojo rm setOutputDirectory outputD
  • 如何查找 Linux 上 Java Desktop API 需要哪些库?

    我正在尝试找到一种方法来确定 Java 需要哪些库才能使 Desktop API 工作 特别是BROWSE功能 我读了一些指南 错误报告和解决方法 但它们都不起作用 我可以通过安装使其在 Debian 上运行libgnome2 0 and
  • 将 C++ LPCWSTR 打印到文件

    我正在尝试将 LPCWSTR 值打印到文件中 但它只打印地址 而不打印值 我尝试过取消引用变量 使用 来获取 value 但这也不起作用 如何打印该值 void dump LPCWSTR text ofstream myfile C myf
  • 用于自定义图例的 Angular ngx-charts 选项?

    我目前正在使用 Angular2 的 ngx charts 我想自定义一些图例 例如将图例放在图表下方 或重命名图例字段 或使图例更宽 部分文本被截断 等 有什么好的选项来自定义图例吗 或者这通常是不可能的 或者最好的方法是什么 目前 我的