[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-8867":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":21,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":15,"lastSyncTime":29,"discoverSource":30},8867,"DataVisualization","SimonZhangITer\u002FDataVisualization","SimonZhangITer",":smiling_imp: by vue2.x with echarts3.3.2","https:\u002F\u002Fsimonzhangiter.github.io\u002FDataVisualization",null,"Vue",1727,498,92,2,0,56.09,"MIT License",false,"master",true,[23,24,25],"echarts","vue","vue-router","2026-06-12 04:00:41","# 数据可视化\n\n> 将数据通过图表的形式展现出来将大大的提升可读性和阅读效率\n\n> 本例包含柱状图、折线图、散点图、热力图、复杂柱状图、预览面板等\n\n后续会有新的版本，欢迎大家关注 \n\n# 技术栈\n\n- vue2.x\n- vuex _存储公共变量，如色值等_\n- vue-router _路由_\n- element-ui _饿了么基于vue2开发组件库，本例使用了其中的datePicker_\n- [Apache ECharts (incubating)](https:\u002F\u002Fgithub.com\u002Fapache\u002Fincubator-echarts) _一款丰富的图表库_\n- webpack、ES6、Babel、Stylus...\n\n# 演示\n\n\u003Cdiv align=center style=\"margin-top:30px\">此项目为PC端数据可视化，请在电脑端查看\u003C\u002Fdiv>\n\u003Cdiv align=center>\u003Ca href=\"https:\u002F\u002Fsimonzhangiter.github.io\u002FDataVisualization\" target=_blank>在线演示戳我\u003C\u002Fa>\u003C\u002Fdiv>\n\n# 项目截图\n\n\u003Cdiv align=center>\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FSimonZhangITer\u002FDataVisualization\u002Fblob\u002Fmaster\u002Fstatic\u002Fimg\u002Fdemo.jpg?raw=true\">\u003C\u002Fdiv>\n\n# 开发\n\n## 组件化\n\n本项目完全采用组件化的思想进行开发。使用vue-router作为路由，每个页面都是一个组件，每个组件里又包含多个组件。可以看到，多种图表的标题和日期筛选等都是类似的格式，所以这两个都分别做成了组件。\n\n除此之外，在筛选产品的时候用到的checkbox也被我写成了组件，有需要的朋友也可以剥离出去单独使用（不过写的比较粗糙~）\n\n每个图表都是一个单独的组件，也可以单独的剥离出去使用。\n\n## 柱状图\n\n本项目包含多种图表，这里挑“柱状图”说一说，其他的图标实现方式类似。\n\n```html\n\u003Ctemplate>\n\u003Cdiv class=\"multipleColumn\">\n  \u003Cv-header :name=\"name\" :legendArr=\"legendArr\" :myChart=\"myChart\">\u003C\u002Fv-header>\n  \u003Cv-filter :myChart=\"myChart\" v-if=\"myChart._dom\">\u003C\u002Fv-filter>\n  \u003Cdiv class=\"main\">\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n```\n页面HTML可以看到，一个完整的图标是由三个部分组成：\n\n\n\n### v-header\n头组件，存放标题以及不同类型的筛选等\n\n- name _图表的标题_\n- legendArr _图表所包含的多种类型_\n- myChart _当前图表对象_\n\n### v-filter\n\n筛选组件，日期的筛选以及不同产品的筛选\n\n- myChart _当前图表对象_\n\nv-if=\"myChart._dom\"表示在当前图表dom元素渲染完成之后再渲染filter组件\n\n### main\n\n_图表的主体文件_\n\n需要注意的是：\u003Cfont color=red>main必须要指定宽高，否则echarts无法渲染dom\u003C\u002Ffont>\n\n### 初始化\n\n初始化需要在vue的mounted()方法里执行，因为这里能保证当前的页面元素都已经被加载完成。\n\n```javascript\nmounted() {\n  \u002F\u002F 基于准备好的dom，初始化echarts实例\n  this.myChart = echarts.init(document.querySelector('.multipleColumn .main'))\n  this.myChart.setOption(this.options) \u002F\u002Fthis.options为echarts的配置，详情可去我的gitHub查看\n}\n```\n\n如果要在created()方法里执行，则需要另外加上\n\n```javascript\nthis.$nextTick(() => {\n  this._init()\n})\n```\n\n## DashBoard\n\ndashboard是一个所有图表的预览，并且有一个点击切换的动画效果，这里大概讲解一个实现方式。\n\n### html\n\n```html\n\u003Ctemplate lang=\"html\">\n  \u003Cdiv class=\"dashboard\">\n    \u003Cdiv class=\"flex-container column\">\n        \u003Cdiv class=\"item one\" @click=\"clickChart('1')\" style=\"transform: translate(-22.4%,-33.5%) scale(0.33)\">\n          \u003CmultipleColumn>\u003C\u002FmultipleColumn>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"item two\" @click=\"clickChart('2')\" style=\"transform: translate(-22.4%,0.5%) scale(0.33)\">\n          \u003Ccolumn>\u003C\u002Fcolumn>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"item three\" @click=\"clickChart('3')\" style=\"transform: translate(-22.4%,34.5%) scale(0.33)\">\n          \u003Cv-line>\u003C\u002Fv-line>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"item four active\" @click=\"clickChart('4')\" style=\"transform: translate(43.7%, 0) scale(1)\">\n          \u003Cpoint>\u003C\u002Fpoint>\n        \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n```\n可以看到，这里是设置了四张图表的Wrapper，每个Wrapper里面装一个图表组件。通过动态的改变style样式来切换。\n\n整体的思想为：\n\n- 使用百分比布局，这样才能在不能大小的屏幕做到自适应\n- 确定图表显示比例，长宽比\n- 只做一个transform变换，这样才能提高性能\n\n### 性能\n\n关于性能方面，这里多说一句：\n\n相信大家都看过在线演示的demo了，不同图表间的切换不仅有位置的变换，还有大小的变换。那么大小的变换大家都知道是用transform的scale变换，但是位置的变换呢，使用left、top？\n\n很显然这样是不对的，但是这样确实也能实现效果，但是会非常的消耗性能。一个CSS属性的变化就相当于一个线程，那么如果使用了left、top以及transform的话就是三个线程同时开启，那你的电脑温度将会很快飙升的\n\n正确的解决方案还是继续使用transform，使用它的\u003Cfont color=red> translate \u003C\u002Ffont>，如：\n\n```css\ntransform: translate(-22.4%,0) scale(0.33)\n```\n\n# 结语\n\n这个项目还是挺实用的一个项目，较好的运用了vue的组件化思想。\n\n大家感兴趣的可以去看看代码，希望对大家有帮助。\n\n\n## Build Setup\n\n``` bash\n# install dependencies\nnpm install\n\n# serve with hot reload at localhost:8080\nnpm run dev\n\n# build for production with minification\nnpm run build\n```\n## 交流\n\n欢迎热爱学习、忠于分享的胖友一起来交流\n\n- QQ：745913574\n\n- QQ群：149683643\n\n- WeChat\n\n\u003Cimg src=\"https:\u002F\u002Fp0.meituan.net\u002Fdpgroup\u002F749d8a79cd0a9bbc4e25b2f474a398d91256770.png?\" width=\"25%\">\n\n\n## Donation\n\nIf you find this project useful, you can buy me a cup of coffee\n\n\u003Cimg width=\"650\" src=\"https:\u002F\u002Fstatic.oschina.net\u002Fuploads\u002Fspace\u002F2017\u002F0223\u002F201225_oQrz_2493500.jpeg\" alt=\"\">\n","该项目是一个基于Vue 2.x和ECharts 3.3.2的数据可视化工具，用于将数据以图表形式展现，提高可读性和阅读效率。核心功能包括多种图表类型（如柱状图、折线图、散点图、热力图等）以及预览面板。项目采用组件化开发思想，使用了Vue Router进行路由管理，Vuex存储公共变量，Element UI提供日期选择器等功能。它适用于需要在PC端进行数据展示和分析的场景，如业务报表、数据分析等。通过动态变换样式来实现图表间的平滑切换，保证了良好的用户体验与性能。","2026-06-11 03:20:04","top_language"]