柱状图 markpoint

今天接到一个新需求,要在指定的柱子上添加markpoint,这个需求最关键的是确定柱子。
1、先上图,给大家看下效果,在最后的日期柱子添加markpoint
[图片上传中...(1630466837453.jpg-33b219-1630466848745-0)]
2、直接上代码
默认配置的option.js

import { translateWidth } from '@/utils/common';

export default {
  // tooltip: {
  //   show: true,
  //   trim: 'axis',
  //   showContent: true,
  //   triggerOn: 'click',
  //   alwaysShowContent: false
  // },
  xAxis: [
    {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
      axisLine: {
        show: true,
        lineStyle: {
          color: '#EBEDF0'
        }
      },
      axisLabel: {
        color: '#000000'
      },
      axisTick: {
        show: false
      }
    }
  ],
  yAxis: {
    type: 'value',
    axisLine: {
      show: false
    },
    axisTick: {
      show: false
    },
    axisLabel: {
      color: '#000000'
    },
    splitLine: {
      lineStyle: {
        type: 'dashed',
        color: '#EBEDF0'
      }
    }
  },
  series: [
    {
      type: 'bar',
      itemStyle: {
        // barBorderRadius: [5, 5, 0, 0],

        normal: {
          label: {
            show: false,    
            position: 'top',
            textStyle: { // 数值样式
              color: '#000',
              fontSize: translateWidth(12)
            }
          },
          color: function (params) {
            // 注意,如果颜色太少的话,后面颜色不会自动循环,最好多定义几个颜色
            const colorList = ['rgba(135,163,210,.4)', 'rgba(135,163,210,.4)', 'rgba(135,163,210,.4)', 'rgba(135,163,210,.4)', 'rgba(135,163,210,.4)', 'rgba(135,163,210,.4)', '#005EFE'];
            return colorList[params.dataIndex];
          }
        }
        // color: 'rgba(135,163,210,.4)'
      },
      emphasis: {
        itemStyle: {
          color: 'rgba(135,163,210,.4)'
        }
      },
      barMaxWidth: 20,
      data: [502.84, 205.97, 332.79, 281.55, 398.35, 214.02]
    }
  ]
};

2、在页面中引入

<template>
  <div v-if="data && data.length" class="bar-charts">
    <VChart
      :key="key"
      :options="options"
      autoresize
    />
  </div>
  <div v-else class="nodata">
    <NoContent/>
  </div>
</template>


<script>
import option from './option';
import _ from 'lodash';
import { translateWidth } from '@/utils/common';
import NoContent from '@/views/common/base/NoContent';

export default {
  name: 'BarEchart',
  components: {
    NoContent
  },
  props: {
    data: {
      type: Array,
      default: () => ([502.84, 205.97, 332.79, 281.55, 398.35, 214.02])
    },
    xAxisData: {
      type: Array,
      default: () => (['A', 'B', 'C', 'D', 'E', 'F'])
    },
    // 分隔线是否垂直方向
    vertical: {
      type: Boolean,
      default: true
    },
    grid: {
      type: Object,
      default: () => ({
        top: translateWidth(40),
        bottom: translateWidth(38),
        right: translateWidth(15)
      })
    },
    time: {
      type: Object,
      default: () => {
      }
    }
  },
  data() {
    return {
      option,
      key: 0,
      setValueNum: ''
    };
  },

  computed: {
     lastNum() {
       const cloneData = _.cloneDeep(this.data);
       return cloneData[cloneData.length - 1];
     },
     barPoint() {
      return {
        //对应项目中图片存在的位置
        symbol: 'image:// ' + require(`../../../../assets/images/barIcon.png`),
        // symbol: 'circle',
        symbolKeepAspect: false,
        symbolSize: [translateWidth(32), translateHeight(15)],
        symbolOffset: [0, '-50%'],
        silent: true,
        label: {
          show: true,
          offset: [0, -3],
          // textStyle: {
          color: '#fff',
          fontSize: translateWidth(12),
          fontWeight: 'bold'
        },
       /**最主要的是这一行,去确定需要展示的值以及位置**/
        data: [{ name: '某个坐标', value: this.lastNum, coord: [6, this.lastNum] }]
      };
    },

    options() {
      const option = _.cloneDeep(this.option);
      option.grid = this.grid;
      option.xAxis[0] = {
        ...option.xAxis[0],
        data: this.xAxisData
      };
      option.yAxis = {
        ...option.yAxis
      };
      option.series[0] = {
        ...option.series[0],
        data: this.data
        // 在这边将series的markPoint重置
        markPoint: this.barPoint
      };
      return option;
    }

  },
  watch: {
    data() {
      this.key++;
    }
  },
  created() {
    // this.option;
  },
  methods: {}
};
</script>

<style lang="less" scoped>
.bar-charts {
  height: 100%;

  .echarts {
    width: 100%;
    height: 100%;
  }
}

.nodata {
  // height: 100%
}
</style>


完结

今天写的有点潦草,但愿没给看的各位造成困扰,看不明白的可以私信滴滴。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容