.
鼠标划上去没有数据框,只有x,y轴的坐标显示。
<template>
<div ref="dom" style="height: 400px" class="charts chart-bar"></div>
</template>
<script>
import * as echarts from 'echarts'
export default {
name: 'ChartLine',
props: {
text: String,
subtext: String,
yName: String,
},
data() {
return {
dom: null,
symbolSize: 10,
oldValueArr: [],
xPoint: null,
valueDatas: [
[
[0, 10],
[1, 10],
[2, 20],
[3, 30],
[4, 36],
[5, 20],
[6, 25],
[7, 20],
[8, 21],
[9, 22],
[10, 23],
[11, 25],
[12, 10],
[13, 11],
[14, 19],
[15, 20],
[16, 12],
[17, 13],
[18, 12],
[19, 1],
[20, 21],
[21, 18],
[22, 10],
[23, 12],
],
[
[0, 20],
[1, 0],
[2, 10],
[3, 10],
[4, 26],
[5, 30],
[6, 15],
[7, 30],
[8, 11],
[9, 32],
[10, 3],
[11, 15],
[12, 20],
[13, 31],
[14, 9],
[15, 10],
[16, 22],
[17, 3],
[18, 32],
[19, 19],
[20, 31],
[21, 8],
[22, 0],
[23, 22],
],
],
}
},
methods: {
resize() {
this.dom.resize()
},
mouseUp(dataIndex, e) {
console.log(e, e.target.position)
let dataArr = this.chart2.convertFromPixel('grid', e.target.position)
if (this.oldValueArr[1] == dataArr[1].toFixed(2)) {
return
}
},
onPointDragend() {
let dataArr = this.chart2.convertFromPixel('grid', this.position)
if (this.oldValueArr[1] == dataArr[1].toFixed(2)) {
return
}
//执行保存数据相关操作
},
mouseDown(dataIndex, e) {
let dataArr = this.chart2.convertFromPixel('grid', e.target.position)
this.oldValueArr = dataArr
},
reduceDimension(arr) {
return Array.prototype.concat.apply([], arr) //数据降维
},
},
mounted() {
this.dom = echarts.init(this.$refs.dom)
this.dom.setOption({
title: {
text: this.text,
subtext: this.subtext,
x: 'center',
},
grid: {
left: 50,
top: 40,
},
//测试legend的代码,没找到合适的解决办法
legend: {
data: ['实际曲线B', '预测曲线A'],
top: '2%',
left: 'center',
itemWidth: 10, //图例的宽度
itemHeight: 10, //图例的高度
textStyle: {
//图例文字的样式
color: '#999',
fontSize: 14,
},
z: 2000,
},
tooltip: {
trigger: 'axis',
textStyle: {
align: 'left',
},
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#09cba0',
},
},
formatter: function (params) {
console.log(params)
},
},
xAxis: {
min: 0,
max: 23,
type: 'value',
axisLabel: {
formatter(value) {
return value + ':00' // 格式时间显示方式
},
},
axisLine: { onZero: false },
},
yAxis: {
min: 0,
max: 36,
type: 'value',
name: this.yName,
axisLine: { onZero: false },
},
series: [
{
id: 'b',
name: '实际曲线B',
type: 'line',
smooth: true,
symbolSize: this.symbolSize, // 为了方便拖拽,把 symbolSize 尺寸设大了。
data: this.valueDatas[1],
},
{
id: 'a',
name: '预测曲线A',
type: 'line',
smooth: true,
symbolSize: this.symbolSize, // 为了方便拖拽,把 symbolSize 尺寸设大了。
data: this.valueDatas[0],
},
],
})
this.dom.setOption({
graphic: this.reduceDimension(
this.valueDatas.map((elment, i) => {
return echarts.util.map(elment, (dataItem, dataIndex) => {
const that = this
return {
type: 'circle',
shape: {
// 圆点的半径。
r: that.symbolSize / 2,
},
position: that.dom.convertToPixel('grid', dataItem),
// 这个属性让圆点不可见(但是不影响他响应鼠标事件)。
invisible: true,
// 这个属性让圆点可以被拖拽。
draggable: true,
// 把 z 值设得比较大,表示这个圆点在最上方,能覆盖住已有的折线图的圆点。
z: 100,
// 元素正在拖动时触发
ondrag:
i == 0
? echarts.util.curry(
function (dataIndex) {
that.xPoint = null
that.xPoint = dataIndex
let origin = that.dom.convertToPixel('grid', elment[dataIndex]) // 得到每个圆点原始位置
if (this.position[1] > 330) {
this.position[1] = 330
} else if (this.position[1] < 40) {
this.position[1] = 40
}
this.position[0] = origin[0] // 控制每个点位只能在y轴方向移动
// this.position[1] = origin[1] // 控制每个点位只能在x轴方向移动
// 实时获取拖动的点位信息并根据此信息重新画图
elment[dataIndex] = that.dom.convertFromPixel('grid', this.position)
elment[dataIndex][0] = that.xPoint
that.dom.setOption({
series: [
{
id: i == 0 ? 'a' : 'b',
data: elment,
},
],
})
},
dataIndex,
i
)
: '',
// 用户完成元素拖动后触发
ondragend:
i == 0
? echarts.util.curry(
function (dataIndex) {
setTimeout(function () {
elment[dataIndex][0] = that.xPoint
elment[dataIndex][1] = elment[dataIndex][1].toFixed(2)
alert('拖动完成: ' + elment[dataIndex])
elment[dataIndex] = that.dom.convertFromPixel('grid', this.position)
}, 500)
},
dataIndex,
i
)
: '', // 拖动完成
// 事件会在鼠标移动到指定对象时发生
onmousemove: echarts.util.curry(
function (dataIndex, a) {
console.log(dataIndex, a, a.offsetX, a.offsetY)
setTimeout(() => {
that.dom.dispatchAction({
type: 'showTip', //tooltip为axis属性 使用 showTip 绑定tooltip
x: a.offsetX,
y: a.offsetY,
})
}, 100)
},
dataIndex
// i
),
}
})
})
),
})
},
// beforeDestroy() {
// off(window, 'resize', this.resize)
// },
}
</script>
因为你tooltip的formatter写了一个函数,却没有返回值,默认返回undefined了,可以把这个注释掉,或者里面加上你自定义的返回值
formatter: function (params) {
console.log(params)
}
应该是this的问题,你可以将
this.dom = echarts.init(this.$refs.dom)
this.dom.setOption({
...
})
换成
let dom = echarts.init(this.$refs.dom)
dom.setOption({
...
})
配置如下: 按道理第三个点应该显示对应的黄色,但这里却不显示颜色。我把两处的汉字"失控"改成数字1就可以正常显示了,这是为什么呢?
想要实现如下所示的听力图, 可以自定义图标的形状,可以点击添加点,还可以拖动已经绘制好的线。 想用echarts 实现。但是x y轴又不能和图中一样。 希望大佬们给点意见和解决方案
图片来源:模仿"饿了么外卖"折线图筛选功能 这个图应该如何实现呢、滑动Slider滑块、对应折线图也随之高亮展示 目前发现一个类似的功能https://github.com/oguzhaninan/vue-histogram-slider只不过他是柱形图而我是折线图
如图,由于横坐标的名字太长显示不全了,我想使用缩短横坐标轴的长度来解决,但是没有找到相应的属性。或者有没有其他方法可以让横坐标的名字显示全呢? 我也尝试使用barwidth属性来缩短每个柱子的宽度,但是横坐标的刻度间隔和长度仍然不变。
echarts折线图展示问题: 使用折线图展示一年的采购价格,哪一天采购了就会有一个对应的价格数据,没有采购的日期数据就为空.使用‘connectNulls’将数据连接起来 遇到的问题是,由于x轴坐标太多,echarts自身进行了优化展示,会导致’2023-12-01‘对应的‘12’这个数据点不展示。由于每个点都代表着“有进行采购”这个动作,所以有数据的点一定不能省去 例如下图:‘2021-11-
vue项目打包部署之后本地json为什么访问不到? 使用three.js画了个中国地图,本人小白也是看大佬源码改的代码。 界面展示是正常的 但是发布之后就直接不展示地图,中间区域是没有地图元素的,并且颜色展示不正常 颜色不正常是我的另一个问题, https://segmentfault.com/q/1010000044485869 打包之后dist文件下面是有 正常的json文件的 config配