【问题标题】:Display a different text in Legend在图例中显示不同的文本
【发布时间】:2014-03-16 17:44:04
【问题描述】:

这是关于版本 4.2.2 我们有这样的图表

var store = Ext.create('Ext.data.JsonStore', {
    fields: ['name', 'data'],
    data: [
        { 'name': 'metric one',   'data':10 },
        { 'name': 'metric two',  'data':27 }
    ]
});

Ext.create('Ext.chart.Chart', {
    renderTo: Ext.getBody(),
    width: 500,
    height: 300,
    animate: true,
    store: store,
    legend: {
        position: 'right'
    },
    axes: [
        {
            type: 'Numeric',
            position: 'left',
            fields: ['data'],
            label: {
                renderer: Ext.util.Format.numberRenderer('0,0')
            },
            title: 'Sample Values',
            grid: true,
            minimum: 0
        },
        {
            type: 'Category',
            position: 'bottom',
            fields: ['name'],
            title: 'Sample Metrics'
        }
    ],
    series: [
        {
            type: 'column',
            axis: 'left',
            highlight: true,
            tips: {
              trackMouse: true,
              width: 140,
              height: 28,
              renderer: function(storeItem, item) {
                this.setTitle(storeItem.get('name') + ': ' + storeItem.get('data') + ' $');
              }
            },
            label: {
              display: 'insideEnd',
              'text-anchor': 'middle',
                field: 'data',
                renderer: Ext.util.Format.numberRenderer('0'),
                orientation: 'vertical',
                color: '#333'
            },
            xField: 'name',
            yField: 'data'
        }
    ]
});

但是Legend 只显示字段名称,这不是很有帮助。我们需要在这里应用一个自定义值,它应该是静态类型的。但我们没有发现这样做。有一个 showInLegend 属性,但我们没有找到 legendTextdisplayText 属性,这可能允许我们将名称从 data 更改为 A much better Name

编辑 在图例中显示更多日期的示例

Ext.application({
    name : 'Fiddle',

    launch : function() {
        var store = Ext.create('Ext.data.JsonStore', {
    fields: ['name', 'data', 'data2'],
    data: [
        { 'name': 'metric one',   'data':10, 'data2':2 },
        { 'name': 'metric two',  'data':27, 'data2': 5 }
    ]
});

Ext.create('Ext.chart.Chart', {
    renderTo: Ext.getBody(),
    width: 500,
    height: 300,
    animate: true,
    store: store,
    legend: {
        position: 'right'
    },
    axes: [
        {
            type: 'Numeric',
            position: 'left',
            fields: ['data','data2'],
            label: {
                renderer: Ext.util.Format.numberRenderer('0,0')
            },
            title: 'Sample Values',
            grid: true,
            minimum: 0
        },
        {
            type: 'Category',
            position: 'bottom',
            fields: ['name'],
            title: 'Sample Metrics'
        }
    ],
    series: [
        {
            type: 'column',
            axis: 'left',
            highlight: true,
            stacked: true,
            tips: {
              trackMouse: true,
              width: 140,
              height: 28,
              renderer: function(storeItem, item) {
                this.setTitle(storeItem.get('name') + ': ' + storeItem.get('data') + ' $');
              }
            },
            label: {
              display: 'insideEnd',
              'text-anchor': 'middle',
                field: 'data',
                renderer: Ext.util.Format.numberRenderer('0'),
                orientation: 'vertical',
                color: '#333'
            },
            xField: 'name',
            yField: ['data','data2'],
            title:'YourNewLabel'
        }
    ]
});
    }
});

【问题讨论】:

    标签: extjs extjs4 extjs-chart


    【解决方案1】:

    您可以使用title 更改图例中的label。查看我从您的示例代码创建的this fiddle 以供使用。

    series: [
            {
                type: 'column',
                axis: 'left',
                highlight: true,
                tips: {
                  trackMouse: true,
                  width: 140,
                  height: 28,
                  renderer: function(storeItem, item) {
                    this.setTitle(storeItem.get('name') + ': ' + storeItem.get('data') + ' $');
                  }
                },
                label: {
                  display: 'insideEnd',
                  'text-anchor': 'middle',
                    field: 'data',
                    renderer: Ext.util.Format.numberRenderer('0'),
                    orientation: 'vertical',
                    color: '#333'
                },
                xField: 'name',
                yField: 'data',
                title:'YourNewLabel'
            }
    

    更新:如果您有多个字段,请提供相应标题的array。例如:

    title:['My First Field','My Second Field']

    这是fiddle demonstrating multiple titles

    【讨论】:

    • 感谢您的回复和此提示。我认为我们说得不够清楚,因为我们已经堆叠了多个数据字段的列。请查看已编辑的问题(我不知道如何将其保存在小提琴中,所以我复制了它) - 现在图例中的两个标签具有相同的名称。
    • @JJR 我对原始帖子添加了更新。基本上,您需要提供与每个字段对应的标题的array。 (答案中有更多信息)
    • 非常感谢,成功了!但这将我们引向下一个问题:How to use html tags inside a chart legend
    • @JJR 我对此并不肯定,最好将其作为一个单独的问题发布?
    • 好吧,我已经这样做了...在我的上一条评论中有一个指向该问题的链接;)
    猜你喜欢
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2019-11-28
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多