{"id":14211,"date":"2021-08-26T15:59:05","date_gmt":"2021-08-26T15:59:05","guid":{"rendered":"https:\/\/freehost.page\/?p=14211"},"modified":"2021-08-26T15:59:05","modified_gmt":"2021-08-26T15:59:05","slug":"bang-bieu-echarts","status":"publish","type":"post","link":"https:\/\/kiencang.net\/bang-bieu-echarts\/","title":{"rendered":"L\u00e0m b\u1ea3ng bi\u1ec3u th\u1ed1ng k\u00ea \u0111\u1eb9p h\u01a1n tr\u00ean web v\u1edbi th\u01b0 vi\u1ec7n JS ECharts"},"content":{"rendered":"\n

\u0110\u00e2y l\u00e0 th\u01b0 vi\u1ec7n JS c\u1ee7a Baidu<\/a> gi\u00fap ch\u00fang ta t\u1ea1o c\u00e1c b\u1ea3ng bi\u1ec3u \u0111\u1eb9p v\u00e0 r\u1ea5t sinh \u0111\u1ed9ng tr\u00ean web. \u0110\u1ee1 ph\u1ea3i l\u00e0m b\u1ea3ng tr\u00ean Excel r\u1ed3i ch\u1ee5p \u1ea3nh l\u1ea1i. M\u1ed9t \u0111i\u1ec1u r\u1ea5t quan tr\u1ecdng kh\u00e1c l\u00e0 c\u00e1c b\u1ea3ng bi\u1ec3u nh\u01b0 th\u1ebf n\u00e0y gi\u00fap ch\u00fang ta xu\u1ea5t ra \u0111\u01b0\u1ee3c c\u00e1c b\u1ea3ng \u0111\u1ed9ng t\u00f9y v\u00e0o d\u1eef li\u1ec7u \u0111\u1ea7u v\u00e0o ng\u01b0\u1eddi d\u00f9ng nh\u1eadp, \u0111i\u1ec1u m\u00e0 \u1ea3nh c\u1ed1 \u0111\u1ecbnh kh\u00f4ng th\u1ec3 l\u00e0m \u0111\u01b0\u1ee3c.<\/p>\n\n\n\n

\u0110\u1ea7u ti\u00ean trong th\u1ebb <head><\/code> c\u1ee7a HTML b\u1ea1n \u0111\u01b0a file JS c\u1ee7a ECharts v\u00e0o:<\/p>\n\n\n\n

    <head>\n        <title>TODO supply a title<\/title>\n        <meta charset=\"UTF-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n        <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/echarts\/5.1.2\/echarts.min.js\"><\/script>\n    <\/head><\/code><\/pre>\n\n\n\n

C\u00f3 2 l\u1ef1a ch\u1ecdn. M\u1ed9t l\u00e0 file JS \u0111\u00f3 l\u01b0u tr\u00ean host c\u1ee7a b\u1ea1n, hai l\u00e0 b\u1ea1n d\u00f9ng CDN. V\u00ed d\u1ee5 tr\u00ean t\u00f4i d\u00f9ng \u0111\u01b0\u1eddng link CDN \u0111\u01b0\u1ee3c Cloudflare l\u01b0u s\u1eb5n tr\u00ean host c\u1ee7a h\u1ecd, \u0111i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 gi\u00fap t\u1ed1c \u0111\u1ed9 t\u1ea3i nhanh h\u01a1n v\u00e0 ch\u1eafc ch\u1eafn ti\u1ebft ki\u1ec7m b\u0103ng th\u00f4ng cho b\u1ea1n.<\/p>\n\n\n\n

Ti\u1ebfp theo trong th\u1ebb <body><\/code>, ch\u00fang ta t\u1ea1o m\u1ed9t div<\/code> c\u00f3 id l\u00e0 main, c\u00f3 th\u00f4ng s\u1ed1 chi\u1ec1u r\u1ed9ng v\u00e0 chi\u1ec1u cao cho n\u00f3 (b\u1ea1n d\u0129 nhi\u00ean c\u0169ng c\u00f3 th\u1ec3 \u0111i\u1ec1u ch\u1ec9nh th\u00f4ng s\u1ed1 n\u00e0y qua file CSS ngo\u00e0i ho\u1eb7c qua CSS \u0111\u1eb7t trong th\u1ebb head):<\/p>\n\n\n\n

<body>    \n      <div id=\"main\" style=\"width:600px; height:550px;\"><\/div>\n\n<\/body><\/code><\/pre>\n\n\n\n

Div n\u00e0y s\u1ebd \u0111\u01b0\u1ee3c d\u00f9ng \u0111\u1ec3 hi\u1ec3n th\u1ecb bi\u1ec3u \u0111\u1ed3 c\u1ee7a ch\u00fang ta.<\/p>\n\n\n\n

Gi\u1edd l\u00e0 ph\u1ea7n quan tr\u1ecdng nh\u1ea5t, vi\u1ebft c\u00e1c \u0111o\u1ea1n m\u00e3 JS \u0111\u1ec3 t\u1ea1o ra b\u1ea3ng bi\u1ec3u. L\u00fac \u0111\u1ea7u b\u1ea1n c\u00f3 th\u1ec3 v\u00e0o m\u1eabu c\u1ee7a ECharts v\u00e0 copy m\u00e3 m\u1eabu v\u1ec1 \u0111\u1ec3 xem, c\u00f3 r\u1ea5t nhi\u1ec1u m\u1eabu \u0111\u1eb9p \u1edf \u0111\u00e2y: echarts.apache.org\/examples\/en\/index.html<\/a><\/p>\n\n\n\n

B\u1ea1n ch\u1ecdn m\u1eabu mu\u1ed1n th\u1eed r\u1ed3i click v\u00e0o Full code. Copy to\u00e0n b\u1ed9 m\u00e3 \u0111\u00f3 r\u1ed3i \u0111\u01b0a v\u00e0o trong th\u1ebb <script><\/code> v\u00e0 ngay b\u00ean d\u01b0\u1edbi div c\u00f3 id main \u1edf tr\u00ean.<\/p>\n\n\n\n

V\u00ed d\u1ee5:<\/p>\n\n\n\n

<div id=\"main\" style=\"width:600px; height:550px;\"><\/div>\n\n     <script type=\"text\/javascript\">\n\n                    var chartDom = document.getElementById('main');\n                    var myChart = echarts.init(chartDom);\n                    var option;\n\n                    option = {\n                        dataset: {\n                            source: [\n                                ['score', 'amount', 'product'],\n                                [89.3, 58212, 'Matcha Latte'],\n                                [57.1, 78254, 'Milk Tea'],\n                                [74.4, 41032, 'Cheese Cocoa'],\n                                [50.1, 12755, 'Cheese Brownie'],\n                                [89.7, 20145, 'Matcha Cocoa'],\n                                [68.1, 79146, 'Tea'],\n                                [19.6, 91852, 'Orange Juice'],\n                                [10.6, 101852, 'Lemon Juice'],\n                                [32.7, 20112, 'Walnut Brownie']\n                            ]\n                        },\n                        grid: {containLabel: true},\n                        xAxis: {name: 'amount'},\n                        yAxis: {type: 'category'},\n                        visualMap: {\n                            orient: 'horizontal',\n                            left: 'center',\n                            min: 10,\n                            max: 100,\n                            text: ['High Score', 'Low Score'],\n                            \/\/ Map the score column to color\n                            dimension: 0,\n                            inRange: {\n                                color: ['#65B581', '#FFCE34', '#FD665F']\n                            }\n                        },\n                        series: [\n                            {\n                                type: 'bar',\n                                encode: {\n                                    \/\/ Map the \"amount\" column to X axis.\n                                    x: 'amount',\n                                    \/\/ Map the \"product\" column to Y axis\n                                    y: 'product'\n                                }\n                            }\n                        ]\n                    };\n\n                    option && myChart.setOption(option);\n       \n    <\/script><\/code><\/pre>\n\n\n\n

N\u1ebfu th\u1ea5y m\u00e3 ch\u01b0a ch\u1ea1y th\u00ec b\u1ea1n b\u1ecf d\u00f2ng import * as echarts from 'echarts';<\/code> \u0111i \u1edf ngay tr\u00ean \u0111\u1ea7u trong m\u00e3 m\u1eabu l\u00e0 OK.<\/p>\n\n\n\n

M\u1ea5y t\u00f9y ch\u1ecdn c\u01a1 b\u1ea3n<\/h2>\n\n\n\n

1. B\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 \u0111\u1ed5i t\u00ean id c\u1ee7a div sang t\u00ean kh\u00e1c, v\u00ed d\u1ee5 bieudo2<\/strong><\/p>\n\n\n\n

Khi \u0111\u00f3 b\u1ea1n c\u0169ng ph\u1ea3i \u0111\u1ed5i t\u00ean \u1edf ph\u1ea7n n\u00e0y theo d\u1ea1ng t\u01b0\u01a1ng \u1ee9ng:<\/p>\n\n\n\n

var chartDom = document.getElementById('bieudo2');<\/code><\/pre>\n\n\n\n

2. \u0110\u1ec3 c\u00f3 b\u1ea3ng responsive, t\u1ee9c l\u00e0 co gi\u00e3n tr\u00ean nhi\u1ec1u m\u00e0n h\u00ecnh c\u00f3 chi\u1ec1u r\u1ed9ng kh\u00e1c nhau b\u1ea1n c\u1ea7n l\u00e0m hai \u0111i\u1ec1u sau<\/strong><\/p>\n\n\n\n