F2 可视化方案 饼图 和 进度条

文档

  1. ui 组件中集成了 F2 移动端可视化方案
  2. 文档中写了俩个简单的 圆形图的 demo
  3. 具体需要使用查看F2 的官方文档

效果展示

F2 可视化方案 饼图 和 进度条 - 图1

代码示例

  1. <template>
  2. <div>
  3. <canvas id="mountNode" height="260"></canvas>
  4. <br/><br/><br/>
  5. <canvas id="mountNode2" height="260"></canvas>
  6. </div>
  7. </template>
  8. <script>
  9. import F2 from '@antv/f2'
  10. export default {
  11. created() {
  12. this.$nextTick(() => {
  13. this.setNavbar(); // 设置topbar
  14. // 画饼图
  15. this.playMountNode();
  16. // 画进度圆
  17. this.mountNode2();
  18. });
  19. },
  20. data () {
  21. return {
  22. list: [{
  23. name: '芳华',
  24. percent: 0.4,
  25. a: '1'
  26. }, {
  27. name: '妖猫传',
  28. percent: 0.2,
  29. a: '1'
  30. }, {
  31. name: '机器之血',
  32. percent: 0.18,
  33. a: '1'
  34. }, {
  35. name: '心理罪',
  36. percent: 0.15,
  37. a: '1'
  38. }, {
  39. name: '寻梦环游记',
  40. percent: 0.05,
  41. a: '1'
  42. }, {
  43. name: '其他',
  44. percent: 0.02,
  45. a: '1'
  46. }],
  47. }
  48. },
  49. methods: {
  50. setNavbar(){
  51. AI.setNavbar({
  52. title: 'F2饼图',
  53. })
  54. },
  55. // 画饼图
  56. playMountNode() {
  57. var map = {
  58. '芳华': '40%',
  59. '妖猫传': '20%',
  60. '机器之血': '18%',
  61. '心理罪': '15%',
  62. '寻梦环游记': '5%',
  63. '其他': '2%'
  64. };
  65. var chart = new F2.Chart({
  66. id: 'mountNode',
  67. pixelRatio: window.devicePixelRatio
  68. });
  69. chart.source(this.list, {
  70. percent: {
  71. formatter: function formatter(val) {
  72. return val * 100 + '%';
  73. }
  74. }
  75. });
  76. chart.legend({
  77. position: 'right',
  78. itemFormatter: function itemFormatter(val) {
  79. return val + ' ' + map[val];
  80. }
  81. });
  82. chart.tooltip(false);
  83. chart.coord('polar', {
  84. transposed: true,
  85. radius: 0.85
  86. });
  87. chart.axis(false);
  88. chart.interval().position('a*percent').color('name', ['#1890FF', '#13C2C2', '#2FC25B', '#FACC14', '#F04864', '#8543E0']).adjust('stack').style({
  89. lineWidth: 1,
  90. stroke: '#fff',
  91. lineJoin: 'round',
  92. lineCap: 'round'
  93. }).animate({
  94. appear: {
  95. duration: 1200,
  96. easing: 'bounceOut'
  97. }
  98. });
  99. chart.render();
  100. },
  101. // 画进度圆
  102. mountNode2() {
  103. var fontSize = 24 * (window.innerWidth / 375); // 字体适配不同屏幕
  104. var data = [{
  105. x: '1',
  106. y: 85
  107. }];
  108. var chart = new F2.Chart({
  109. id: 'mountNode2',
  110. pixelRatio: window.devicePixelRatio
  111. });
  112. chart.source(data, {
  113. y: {
  114. max: 100,
  115. min: 0
  116. }
  117. });
  118. chart.axis(false);
  119. chart.tooltip(false);
  120. chart.coord('polar', {
  121. transposed: true,
  122. innerRadius: 0.8,
  123. radius: 0.85
  124. });
  125. chart.guide().arc({
  126. start: [0, 0],
  127. end: [1, 99.98],
  128. top: false,
  129. style: {
  130. lineWidth: 20,
  131. stroke: '#ccc'
  132. }
  133. });
  134. chart.guide().text({
  135. position: ['50%', '50%'],
  136. content: '85%',
  137. style: {
  138. fontSize: fontSize,
  139. fill: '#1890FF'
  140. }
  141. });
  142. chart.interval().position('x*y').size(20).animate({
  143. appear: {
  144. duration: 1200,
  145. easing: 'cubicIn'
  146. }
  147. });
  148. chart.render();
  149. }
  150. }
  151. }
  152. </script>
  153. <style>
  154. #mountNode, #mountNode2{
  155. width: 100%;
  156. }
  157. </style>