feat: 自建台站散点图右侧增加根据滑块范围控制颜色功能

This commit is contained in:
Xu Zhimeng 2024-08-23 15:27:58 +08:00
parent 8798ac5b66
commit 2a957f7427

View File

@ -26,8 +26,16 @@
@resize="handleChartResize"
/>
<div class="bar">
<div>{{ visualMapMax }}</div>
<div class="bar-main"></div>
<div>{{ visualMap.max }}</div>
<div class="bar-main">
<a-slider
v-model="visualMap.value"
range
vertical
:max="visualMap.max"
@afterChange="handleSliderChange"
></a-slider>
</div>
<div>0</div>
</div>
</div>
@ -224,7 +232,6 @@ export default {
return {
showROI: true,
myChart: null,
startChannel: null,
endChannel: null,
boundaryList: [], //
@ -232,8 +239,6 @@ export default {
isLog: true, // log
currBoundaryItem: null, //
visualMapMax: 0,
chartAxis: cloneDeep(ChartAxis),
boundary: [],
@ -243,6 +248,12 @@ export default {
g: 0,
c: 0,
},
visualMap: {
//
value: [0, 0],
max: 0,
},
}
},
created() {
@ -357,23 +368,52 @@ export default {
// scatter
buildScatterItem(xAxis, yAxis, count) {
const { r, g, b } = this.interpolateColor(1 - count / this.visualMapMax)
return {
value: [xAxis, yAxis],
value: [xAxis, yAxis, count],
itemStyle: {
color: `rgb(${r}, ${g}, ${b})`,
color: this.getScatterItemColor(count),
},
}
},
setVisialMapParams() {
const counts = this.histogramDataList.filter(({ c }) => c).map(({ c }) => c)
if (counts.length) {
this.visualMapMax = counts.sort((a, b) => b - a)[0]
//
getScatterItemColor(count) {
const [min, max] = this.visualMap.value
let color = ''
if (count >= max) {
color = '#f00'
} else if (count <= min) {
color = '#fff'
} else {
this.visualMapMax = 0
const { r, g, b } = this.interpolateColor(1 - (count - min) / (max - min))
color = `rgb(${r}, ${g}, ${b})`
}
return color
},
//
setVisialMapParams() {
const counts = this.histogramDataList
.filter(({ c }) => c)
.map(({ c }) => c)
.sort((a, b) => b - a)
const max = (counts[0] || 0) + 100
// 100
this.visualMap.max = max
this.visualMap.value = [0, max]
},
//
handleSliderChange() {
this.scatterList.forEach((item) => {
item.itemStyle.color = this.getScatterItemColor(item.value[2])
})
this.$refs.chartTwoDRef.setOption({
series: {
data: this.scatterList,
},
})
},
//
@ -710,7 +750,35 @@ export default {
&-main {
width: 14px;
flex: 1;
background: linear-gradient(to bottom, #ff0000 0, #fff 100%);
.ant-slider {
margin: 0;
padding: 0;
::v-deep {
.ant-slider-handle {
left: -2px;
right: -2px;
border-radius: 0;
margin-left: 0;
box-shadow: none;
border: 0;
background: #0cebc9;
height: 6px;
width: auto;
}
.ant-slider-rail {
width: 100%;
background: #084248 !important;
}
.ant-slider-track {
width: 100%;
background: linear-gradient(to bottom, #f00 0, #fff 100%);
}
}
}
}
}
}
@ -728,11 +796,9 @@ export default {
}
&.disabled {
cursor: not-allowed;
.boundary-item-left,
.boundary-item-right {
cursor: default;
pointer-events: none;
}
}
}