0. 概述
• Charts types
• Bar and column charts
• Area and line charts
• Pie charts
• 3D charts
• The expense analyzer – a sample project
三种 chart 类型:cartesian, polar, and spacefilling.
1)The cartesian chart (Ext.chart.CartesianChart (xtype: cartesian or chart))直角坐标系(含 x 和 y 轴)
2)The polar chart (Ext.chart.PolarChart (xtype: polar))极坐标图表(含 angular and radial 角度与极轴)
3)The spacefilling chart (Ext.chart.SpaceFillingChart (xtype: spacefilling))空间填充图
4)Bar and column charts ()条形图和柱状图
1. 柱状图
0)创建一个simple tree store
Ext.define('MyApp.model.Population', {
extend: 'Ext.data.Model',
fields: ['year', 'population']
});
Ext.define('MyApp.store.Population', {
extend: 'Ext.data.Store',
storeId: 'population',
model: 'MyApp.model.Population',
data: [
{ "year": "1610","population": 350 },
{ "year": "1650","population": 50368 },
{ "year": "1700", "population": 250888 },
{ "year": "1750","population": 1170760 },
{ "year": "1800","population": 5308483 },
{ "year": "1900","population": 76212168 },
{ "year": "1950","population": 151325798 },
{ "year": "2000","population": 281421906 },
{ "year": "2010","population": 308745538 },
]
});
var store = Ext.create("MyApp.store.Population");
1)用Ext.chart.CartesianChart (xtype:cartesian or chart )创建图表,同时使用上面的store
Ext.create('Ext.Container', {
renderTo: Ext.getBody(),
width: 500,
height: 500,
layout: 'fit',
items: [{
xtype: 'chart',
insetPadding: { top: 60, bottom: 20, left: 20, right: 40 },
store: store,
axes: [{
type: 'numeric',
position: 'left',
grid: true,
title: { text: 'Population in Millions', fontSize: 16 },
}, {
type: 'category',
title: { text: 'Year', fontSize: 16 },
position: 'bottom',
}],
series: [{
type: 'bar',
xField: 'year',
yField: ['population']
}],
sprites: {
type: 'text',
text: 'United States Population',
font: '25px Helvetica',
width: 120,
height: 35,
x: 100,
y: 40
}
} ]
});
2)The bar chart (使用的store同上)
Ext.create('Ext.Container', {
renderTo: Ext.getBody(),
width: 500,
height: 500,
layout: 'fit',
items: [{
xtype: 'chart',
flipXY: true,
insetPadding: { top: 60, bottom: 20, left: 20, right: 40 },
store: store,
axes: [{
type: 'numeric',
position: 'bottom',
grid: true,
title: { text: 'Population in Millions', fontSize: 16 },
}, {
type: 'category',
title: { text: 'Year', fontSize: 16 },
position: 'left',
}],
series: [{
type: 'bar',
xField: 'year',
yField: ['population']
}],
sprites: {
type: 'text',
text: 'United States Population',
font: '25px Helvetica',
width: 120,
height: 35,
x: 100,
y: 40
}
} ]
});
3)The stacked chart (堆积图)
store里面添加一个field (上面的store不变)
Ext.define('MyApp.model.Population', {
extend: 'Ext.data.Model',
fields: ['year', 'total','slaves']
});
Ext.define('MyApp.store.Population', {
extend: 'Ext.data.Store',
storeId: 'population',
model: 'MyApp.model.Population',
data: [
{ "year": "1790", "total": 3.9, "slaves": 0.7 },
{ "year": "1800", "total": 5.3, "slaves": 0.9 },
{ "year": "1810", "total": 7.2, "slaves": 1.2 },
{ "year": "1820", "total": 9.6, "slaves": 1.5 },
{ "year": "1830", "total": 12.9, "slaves": 2 },
{ "year": "1840", "total": 17, "slaves": 2.5 },
{ "year": "1850", "total": 23.2, "slaves": 3.2 },
{ "year": "1860", "total": 31.4, "slaves": 4 },
]
});
var store = Ext.create("MyApp.store.Population");
Ext.create('Ext.Container', {
renderTo: Ext.getBody(),
width: 500,
height: 500,
layout: 'fit',
items: [{
xtype: 'cartesian',
store: store,
insetPadding: { top: 60, bottom: 20, left: 20, right: 40 },
axes: [{
type: 'numeric',
position: 'left',
grid: true,
title: { text: 'Population in Millions', fontSize: 16 },
}, {
type: 'category',
title: { text: 'Year', fontSize: 16 },
position: 'bottom',
}],
series: [{
type: 'bar',
xField: 'year',
yField: ['total','slaves']
}],
sprites: {
type: 'text',
text: 'United States Slaves Distribution 1790 to 1860',
font: '20px Helvetica',
width: 120,
height: 35,
x: 60,
y: 40
}
}]
});
//note:不用stacking也可以,可以set the stacked property of the series to false,意思没变,样式变了
其他可供选项:
• tooltip : This can be added easily by setting a tooltip property in the series
• legend : This can be rendered to any of the four sides of the chart by
specifying the legend config
• sprites : This can be an array if you want to specify multiple information,
such as header, footer, and so on
4)The 3D bar chart
change the type of the series to 3D bar instead of bar
5)The area chart
①The area chart (替换之前的series即可)
series: [{
type: 'area',
xField: 'year',
stacked: false,
title: ['Total','slaves'],
yField: ['total', 'slaves'],
style: {
stroke: "#94ae0a",
fillOpacity: 0.6,
}
}]
6)The line chart
series: [{
type: 'line',
xField: 'year',
title: ['Total'],
yField: ['total']
},
{
type: 'line',
xField: 'year',
title: ['Slaves'],
yField: ['slaves']
}],
7)The pie chart (常用:Ext.chart.PolarChart (xtype: polar))
①The basic pie chart
Ext.define('MyApp.store.Expense', {
extend: 'Ext.data.Store',
alias: 'store.expense',
fields: [ 'cat', 'spent'],
data: [
{ "cat": "Restaurant", "spent": 100},
{ "cat": "Travel", "spent": 150},
{ "cat": "Insurance", "spent": 500},
{ "cat": "Rent", "spent": 1000},
{ "cat": "Groceries", "spent": 400},
{ "cat": "Utilities", "spent": 300},
]
});
var store = Ext.create("MyApp.store.Expense");
Ext.create('Ext.Container', {
renderTo: Ext.getBody(),
width: 600,
height: 500,
layout: 'fit',
items: [{
xtype: 'polar',
legend: { docked: 'bottom' },
insetPadding: { top: 100, bottom: 20, left: 20, right: 40 },
store: store,
series: [{
type: 'pie',
angleField: 'spent',
label: {
field: 'cat',
},
tooltip: {
trackMouse: true,
renderer: function (storeItem, item) {
var value = ((parseFloat(storeItem.get('spent') /
storeItem.store.sum('spent')) * 100.0).toFixed(2));
this.setHtml(storeItem.get('cat') + ': ' + value + '%');
}
}
}]
}]
});
8)The donut chart (圆圈图)
9)The 3D pie chart (3D饼图)
Ext.create('Ext.Container', {
renderTo: Ext.getBody(),
width: 600,
height: 500,
layout: 'fit',
items: [{
xtype: 'polar',
legend: { docked: 'bottom' },
insetPadding: { top: 100, bottom: 20, left: 80, right: 80 },
store: store,
series: [{
type: 'pie3d',
donut: 50,
thickness: 70,
distortion: 0.5,
angleField: 'spent',
label: { field: 'cat' },
tooltip: {
trackMouse: true,
renderer: function (storeItem, item) {
var value = ((parseFloat(storeItem.get('spent') /
storeItem.store.sum('spent')) * 100.0).toFixed(2));
this.setHtml(storeItem.get('cat') + ': ' + value + '%');
}
}
}]
}]
});
2. 案例:expense analyzer 费用分析
见附件