ExtJS 柱形图标签使用显示:'outside' 不工作
ExtJS Column Chart Label Using display: 'outside' Not Working
使用 ExtJS (4.2),我试图简单地在柱形图中每列顶部的外部显示一个标签。这是我所拥有的一小部分:
label: {
field: 'value',
display: 'outside',
orientation: 'horizontal',
font: 'bold 12px Arial'
}
在这种情况下,图表上任何列的任何位置都不会显示任何标签。
但是,如果我将显示值更改为 'insideEnd',所有标签都可以在每列的顶部正常显示。如果我将显示值更改为 'insideStart',所有标签都可以在每列底部正常显示。一旦我将其设置为 'outside'.
,它似乎就不起作用了
我尝试通过向上述代码添加自定义渲染器函数来缩小问题范围,但我注意到当显示设置为 'outside' 时该函数甚至不是 运行,但是如果我将显示更改为 'insideEnd' 或 'insideStart',它会 运行。几乎就像一看到'outside',就直接跳过渲染器,什么也不做。
我被难住了。关于可能导致此问题的原因有什么想法吗?
编辑(已解决):
原因是我将柱形图系列的堆叠设置为 true。
stacked: true
我想 outside 不适用于堆积柱形图。
在此 fiddle 中使用与您自己相同的标签配置,并且标签显示在正确的位置。您能否提供 fiddle 和您的确切代码,我将更新此答案以提供帮助。我在此 fiddle 中使用的代码在下面以供将来参考。
Ext.require('Ext.chart.*');
Ext.require(['Ext.Window', 'Ext.layout.container.Fit', 'Ext.fx.target.Sprite', 'Ext.window.MessageBox']);
Ext.onReady(function() {
var store = Ext.create('Ext.data.JsonStore', {
fields: ['name', 'data'],
data: [{
'name': 'metric one',
'data': 10
}, {
'name': 'metric two',
'data': 7
}, {
'name': 'metric three',
'data': 5
}, {
'name': 'metric four',
'data': 2
}, {
'name': 'metric five',
'data': 27
}]
});
Ext.create('Ext.chart.Chart', {
renderTo: Ext.getBody(),
width: 500,
height: 300,
animate: true,
store: store,
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: 'outside',
field: 'data',
renderer: Ext.util.Format.numberRenderer('0'),
orientation: 'horizontal',
font: 'bold 12px Arial',
color: '#333'
},
xField: 'name',
yField: 'data'
}]
});
});
您的问题可能与系列/其他图表配置有关,但您没有显示出来。
使用 ExtJS (4.2),我试图简单地在柱形图中每列顶部的外部显示一个标签。这是我所拥有的一小部分:
label: {
field: 'value',
display: 'outside',
orientation: 'horizontal',
font: 'bold 12px Arial'
}
在这种情况下,图表上任何列的任何位置都不会显示任何标签。
但是,如果我将显示值更改为 'insideEnd',所有标签都可以在每列的顶部正常显示。如果我将显示值更改为 'insideStart',所有标签都可以在每列底部正常显示。一旦我将其设置为 'outside'.
,它似乎就不起作用了我尝试通过向上述代码添加自定义渲染器函数来缩小问题范围,但我注意到当显示设置为 'outside' 时该函数甚至不是 运行,但是如果我将显示更改为 'insideEnd' 或 'insideStart',它会 运行。几乎就像一看到'outside',就直接跳过渲染器,什么也不做。
我被难住了。关于可能导致此问题的原因有什么想法吗?
编辑(已解决): 原因是我将柱形图系列的堆叠设置为 true。
stacked: true
我想 outside 不适用于堆积柱形图。
在此 fiddle 中使用与您自己相同的标签配置,并且标签显示在正确的位置。您能否提供 fiddle 和您的确切代码,我将更新此答案以提供帮助。我在此 fiddle 中使用的代码在下面以供将来参考。
Ext.require('Ext.chart.*');
Ext.require(['Ext.Window', 'Ext.layout.container.Fit', 'Ext.fx.target.Sprite', 'Ext.window.MessageBox']);
Ext.onReady(function() {
var store = Ext.create('Ext.data.JsonStore', {
fields: ['name', 'data'],
data: [{
'name': 'metric one',
'data': 10
}, {
'name': 'metric two',
'data': 7
}, {
'name': 'metric three',
'data': 5
}, {
'name': 'metric four',
'data': 2
}, {
'name': 'metric five',
'data': 27
}]
});
Ext.create('Ext.chart.Chart', {
renderTo: Ext.getBody(),
width: 500,
height: 300,
animate: true,
store: store,
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: 'outside',
field: 'data',
renderer: Ext.util.Format.numberRenderer('0'),
orientation: 'horizontal',
font: 'bold 12px Arial',
color: '#333'
},
xField: 'name',
yField: 'data'
}]
});
});
您的问题可能与系列/其他图表配置有关,但您没有显示出来。