echarts让X轴标签和x轴的pointer都显示tooltip

项目上现在有一个需求是要求鼠标移到X轴标签上显示这个标签的总数,移到pointer上显示各个快的数量,
但是官方的tooltip.trigger只有,item,axis和none。其效果并不能达到我项目的要求。

所以我只好查看api文档,首先要打开X轴标签的触发开关,X轴标签的触发开关默认是关闭的。

xAxis.triggerEvent boolean
[ default: false ]
坐标轴的标签是否响应和触发鼠标事件,默认不响应。
事件参数如下:
{
    // 组件类型,xAxis, yAxis, radiusAxis, angleAxis
    // 对应组件类型都会有一个属性表示组件的 index,例如 xAxis 就是 xAxisIndex
    componentType: string,
    // 未格式化过的刻度值, 点击刻度标签有效
    value: '',
    // 坐标轴名称, 点击坐标轴名称有效
    name: ''
}

在xAxis,把triggerEvent的值置为true。这样X轴标签的触发就打开了。
接下来给它加事件,echarts的鼠标事件有很多,如’click’、’dblclick’、’mousedown’、’mousemove’、’mouseup’、’mouseover’、’mouseout’,
我用到的是mousemove,

myChart.on('mousemove', function (params) {
   函数内容
});

params包含下面信息
{
    // 当前点击的图形元素所属的组件名称,
    // 其值如 'series'、'markLine'、'markPoint'、'timeLine' 等。
    componentType: string,
    // 系列类型。值可能为:'line'、'bar'、'pie' 等。当 componentType 为 'series' 时有意义。
    seriesType: string,
    // 系列在传入的 option.series 中的 index。当 componentType 为 'series' 时有意义。
    seriesIndex: number,
    // 系列名称。当 componentType 为 'series' 时有意义。
    seriesName: string,
    // 数据名,类目名
    name: string,
    // 数据在传入的 data 数组中的 index
    dataIndex: number,
    // 传入的原始数据项
    data: Object,
    // sankey、graph 等图表同时含有 nodeData 和 edgeData 两种 data,
    // dataType 的值会是 'node' 或者 'edge',表示当前点击在 node 还是 edge 上。
    // 其他大部分图表中只有一种 data,dataType 无意义。
    dataType: string,
    // 传入的数据值
    value: number|Array
    // 数据图形的颜色。当 componentType 为 'series' 时有意义。
    color: string
}

为了区分是X轴标签的触发还是,pointer的触发,我们需要对params里面的值进行判断,

myChart.on('mousemove', function (params) {
        if(params.componentType =='xAxis')
        {
            if(params.value=="Class0"){
                isXLabel=true;
                var offsetX =params.event.offsetX+10;
                var offsetY =params.event.offsetY+10;
                if(params.value="Class1"){
                    myChart.dispatchAction({
                        type: 'showTip',
                        seriesIndex: 0,
                        dataIndex: 0,
                        position:[offsetX,offsetY]
                    });

                }

                console.info(params);

            }

        }

    });
     myChart.on('mouseover', function (params) {
       isXLabel=false;

    });

isXLabel是为了让tiptool来选择要用哪个formatter

 tooltip: {
            hideDelay:2000,
            formatter: function (a) {
                if(isXLabel){
                    console.info(a);
                    return  "total: "+(parseFloat(data1[a.seriesIndex])+parseFloat(data2[a.seriesIndex])+parseFloat(data3[a.seriesIndex])+parseFloat(data4[a.seriesIndex]));
                }else {
                    return  a.componentSubType+":<br>"+a.name+": "+a.value;
                }

            }

        },

这里只实现了其中一个Class0的显示,效果如下
label
pointer

教程到此结束。有不足点,设置了delay的时间为2秒,tooltip会有2秒消失的延迟,如果不设置X轴标签的tooltip会秒消失。假如你们有更好的方法,欢迎讨论留言!!!

好的,这个问题我可以回答。您可以通过设置x_axis和y_axis的label参数来指定坐标的单位,并将坐标tick_label_formatter设置为空,这样坐标上的刻度值就不会显示出来,只会显示单位。具体实现可以参考以下代码示例: ``` from pyecharts.charts import Line from pyecharts import options as opts x_data = [1, 2, 3, 4, 5] y_data = [10, 20, 30, 40, 50] line = Line() line.add_xaxis(xaxis_data=x_data) line.add_yaxis( series_name='', y_axis=y_data, markline_opts=opts.MarkLineOpts( label_opts=opts.LabelOpts(position='end'), data=[opts.MarkLineItem(y=y_data[-1])] ) ) line.set_global_opts( xaxis_opts=opts.AxisOpts( type_='value', name='x单位', axislabel_opts=opts.LabelOpts(margin=10), axisline_opts=opts.AxisLineOpts( is_on_zero=False, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(width=1) ), splitline_opts=opts.SplitLineOpts(is_show=False), axispointer_opts=opts.AxisPointerOpts(is_show=False) ), yaxis_opts=opts.AxisOpts( type_='value', name='y单位', axislabel_opts=opts.LabelOpts(margin=10), axisline_opts=opts.AxisLineOpts( is_on_zero=False, is_symbol_show=False, linestyle_opts=opts.LineStyleOpts(width=1) ), splitline_opts=opts.SplitLineOpts(is_show=False), axispointer_opts=opts.AxisPointerOpts(is_show=False) ), tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), ) line.render("line.html") ``` 这样,生成的图表中,x和y末端只会出现一次单位,并且不会显示刻度值。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值