社团样式节点更改
This commit is contained in:
parent
7e999dc9a2
commit
d4441e068c
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
BIN
src/assets/images/linkPrediction/icon/character-hidden-node.png
Normal file
BIN
src/assets/images/linkPrediction/icon/character-hidden-node.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
BIN
src/assets/images/linkPrediction/icon/hidden-node.png
Normal file
BIN
src/assets/images/linkPrediction/icon/hidden-node.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
BIN
src/assets/images/linkPrediction/icon/normal-group-node.png
Normal file
BIN
src/assets/images/linkPrediction/icon/normal-group-node.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
BIN
src/assets/images/linkPrediction/icon/prediction-node.png
Normal file
BIN
src/assets/images/linkPrediction/icon/prediction-node.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.3 KiB |
|
|
@ -10,6 +10,8 @@ import * as echarts from "echarts"
|
||||||
import anchor from "@/assets/json/anchor_community.json"
|
import anchor from "@/assets/json/anchor_community.json"
|
||||||
import community from "@/assets/json/community_nodes.json"
|
import community from "@/assets/json/community_nodes.json"
|
||||||
import nodeHoverImg from "@/assets/images/nodeHover.png"
|
import nodeHoverImg from "@/assets/images/nodeHover.png"
|
||||||
|
import predictionNodeImg from "@/assets/images/linkPrediction/icon/prediction-node.png"
|
||||||
|
import normalGroupNodeImg from "@/assets/images/linkPrediction/icon/normal-group-node.png"
|
||||||
import { storeToRefs } from "pinia"
|
import { storeToRefs } from "pinia"
|
||||||
import { useKeyNodeRecognitionStore } from "@/store/keyNodeRecognition/index"
|
import { useKeyNodeRecognitionStore } from "@/store/keyNodeRecognition/index"
|
||||||
import csvUrl from "@/assets/json/community_edges1.csv?url"
|
import csvUrl from "@/assets/json/community_edges1.csv?url"
|
||||||
|
|
@ -86,7 +88,8 @@ const initChart = async () => {
|
||||||
([communityId, anchorList]) => ({
|
([communityId, anchorList]) => ({
|
||||||
name: parseInt(communityId), // 社团id
|
name: parseInt(communityId), // 社团id
|
||||||
anchorCount: anchorList.length, // 该社团包含锚点的个数
|
anchorCount: anchorList.length, // 该社团包含锚点的个数
|
||||||
anchorList: anchorList // 该社团包含的锚点id数组
|
anchorList: anchorList, // 该社团包含的锚点id数组
|
||||||
|
symbol: `image://${new URL(predictionNodeImg, import.meta.url)}`
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -96,7 +99,8 @@ const initChart = async () => {
|
||||||
//筛选出不包含锚点的社团(不闪烁的蓝色节点)
|
//筛选出不包含锚点的社团(不闪烁的蓝色节点)
|
||||||
const uncontainedAnchorCommunity = Object.keys(community)
|
const uncontainedAnchorCommunity = Object.keys(community)
|
||||||
.filter((node) => !includedCommunityId.includes(node))
|
.filter((node) => !includedCommunityId.includes(node))
|
||||||
.map((node) => ({ name: parseInt(node), anchorCount: 0 }))
|
.map((node) => ({ name: parseInt(node), anchorCount: 0, symbol: `image://${new URL(normalGroupNodeImg, import.meta.url)}` }))
|
||||||
|
|
||||||
|
|
||||||
//合并成功后,统一设置id,避免重复id出现导致echarts渲染失败,并且取出每个社团中有多少个节点
|
//合并成功后,统一设置id,避免重复id出现导致echarts渲染失败,并且取出每个社团中有多少个节点
|
||||||
const nodes = includeAnchorCommunity.concat(uncontainedAnchorCommunity).map((node, index) => ({
|
const nodes = includeAnchorCommunity.concat(uncontainedAnchorCommunity).map((node, index) => ({
|
||||||
|
|
@ -129,8 +133,8 @@ const initChart = async () => {
|
||||||
const data = { nodes, links }
|
const data = { nodes, links }
|
||||||
|
|
||||||
const categories = [
|
const categories = [
|
||||||
{ name: "普通社团", category: 0 },
|
{ name: "普通社团", category: 0, icon: `image://${new URL(normalGroupNodeImg, import.meta.url)}` },
|
||||||
{ name: "含锚点社团", category: 1 }
|
{ name: "含锚点社团", category: 1, icon: `image://${new URL(predictionNodeImg, import.meta.url)}` }
|
||||||
]
|
]
|
||||||
// // 初始选项
|
// // 初始选项
|
||||||
const option = {
|
const option = {
|
||||||
|
|
@ -139,7 +143,7 @@ const initChart = async () => {
|
||||||
{
|
{
|
||||||
data: categories.map((c) => ({
|
data: categories.map((c) => ({
|
||||||
name: c.name,
|
name: c.name,
|
||||||
itemStyle: {
|
/* itemStyle: {
|
||||||
color:
|
color:
|
||||||
c.category === 0
|
c.category === 0
|
||||||
? new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
? new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
||||||
|
|
@ -152,7 +156,8 @@ const initChart = async () => {
|
||||||
{ offset: 0.37, color: "#aef295" },
|
{ offset: 0.37, color: "#aef295" },
|
||||||
{ offset: 1, color: "#c2f989" }
|
{ offset: 1, color: "#c2f989" }
|
||||||
])
|
])
|
||||||
}
|
}, */
|
||||||
|
icon: c.icon,
|
||||||
})),
|
})),
|
||||||
right: 15,
|
right: 15,
|
||||||
bottom: 13,
|
bottom: 13,
|
||||||
|
|
@ -245,7 +250,7 @@ const initChart = async () => {
|
||||||
animationDurationUpdate: 3500, // 节点移动更平滑
|
animationDurationUpdate: 3500, // 节点移动更平滑
|
||||||
data: data.nodes.map((node) => ({
|
data: data.nodes.map((node) => ({
|
||||||
...node,
|
...node,
|
||||||
symbolSize: node.total / 20 < 30 ? 30 : node.total / 20,
|
symbolSize: node.total / 20 < 30 ? 50 : (node.total / 20) + 20,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color:
|
color:
|
||||||
node.anchorCount === 0
|
node.anchorCount === 0
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@ import bridgeData from '@/assets/json/bridge_neighbors_communities.json';
|
||||||
import bridgeNodeHoverBgImg from '@/assets/images/bridge_node_hoverbgimg.png'
|
import bridgeNodeHoverBgImg from '@/assets/images/bridge_node_hoverbgimg.png'
|
||||||
import { useKeyNodeStore2 } from '@/store/keyNodeStore2'; // 引入store
|
import { useKeyNodeStore2 } from '@/store/keyNodeStore2'; // 引入store
|
||||||
import { cropToCircleAsync } from "@/utils/transform"; // 引入头像处理
|
import { cropToCircleAsync } from "@/utils/transform"; // 引入头像处理
|
||||||
|
import normalGroupNodeImg from '@/assets/images/linkPrediction/icon/normal-group-node.png'
|
||||||
|
|
||||||
|
|
||||||
// 接收父组件传递的timestamp
|
// 接收父组件传递的timestamp
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
@ -34,7 +36,7 @@ const processData = async() => {
|
||||||
const nodes = [];
|
const nodes = [];
|
||||||
const links = [];
|
const links = [];
|
||||||
const addedCommunities = new Set();
|
const addedCommunities = new Set();
|
||||||
// 新增:存储已处理的桥梁节点ID
|
// 存储已处理的桥梁节点ID
|
||||||
const addedBridgeNodes = new Set();
|
const addedBridgeNodes = new Set();
|
||||||
// 获取store实例
|
// 获取store实例
|
||||||
const keyNodeStore2 = useKeyNodeStore2();
|
const keyNodeStore2 = useKeyNodeStore2();
|
||||||
|
|
@ -114,6 +116,7 @@ const processData = async() => {
|
||||||
nodes.push({
|
nodes.push({
|
||||||
id: communityKey,
|
id: communityKey,
|
||||||
category: 1,
|
category: 1,
|
||||||
|
symbol: `image://${new URL(normalGroupNodeImg, import.meta.url)}`,
|
||||||
symbolSize: size
|
symbolSize: size
|
||||||
});
|
});
|
||||||
addedCommunities.add(communityKey);
|
addedCommunities.add(communityKey);
|
||||||
|
|
@ -333,7 +336,7 @@ const initChart = async() => {
|
||||||
// 添加自定义图标
|
// 添加自定义图标
|
||||||
icon: c.category === 0
|
icon: c.category === 0
|
||||||
? `image://${new URL('@/assets/images/icon/bridge_node_legend.png', import.meta.url)}`
|
? `image://${new URL('@/assets/images/icon/bridge_node_legend.png', import.meta.url)}`
|
||||||
: `image://${new URL('@/assets/images/icon/community_node_legend.png', import.meta.url)}`
|
: `image://${new URL(normalGroupNodeImg, import.meta.url)}`
|
||||||
})),
|
})),
|
||||||
right: 15,
|
right: 15,
|
||||||
bottom: 13,
|
bottom: 13,
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
<Graph
|
<Graph
|
||||||
:title="graphTitleImg"
|
:title="graphTitleImg"
|
||||||
:interactionStore="interactionStore"
|
:interactionStore="interactionStore"
|
||||||
|
:storeId="storeId"
|
||||||
@click:openUserInfoDialog="handleOpenUserInfoDialog"
|
@click:openUserInfoDialog="handleOpenUserInfoDialog"
|
||||||
></Graph>
|
></Graph>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -137,6 +138,8 @@ const interactionStore = useCharacterInteractionStore()
|
||||||
const userInfoDialog = ref(false)
|
const userInfoDialog = ref(false)
|
||||||
const curSelectedUser = ref(null)
|
const curSelectedUser = ref(null)
|
||||||
|
|
||||||
|
const storeId = "characterInteraction"
|
||||||
|
|
||||||
//选择某个用户组,更新贴文列表 && 更新关系图二级界面
|
//选择某个用户组,更新贴文列表 && 更新关系图二级界面
|
||||||
const handleSelectedUserGroup = (group) => {
|
const handleSelectedUserGroup = (group) => {
|
||||||
interactionStore.curComponent = "detailNode"
|
interactionStore.curComponent = "detailNode"
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
<div class="graph">
|
<div class="graph">
|
||||||
<Graph
|
<Graph
|
||||||
:title="graphTitleImg"
|
:title="graphTitleImg"
|
||||||
|
:storeId = "storeId"
|
||||||
:interactionStore="characterHiddenStore"
|
:interactionStore="characterHiddenStore"
|
||||||
@click:openUserInfoDialog="handleOpenUserInfoDialog"
|
@click:openUserInfoDialog="handleOpenUserInfoDialog"
|
||||||
></Graph>
|
></Graph>
|
||||||
|
|
@ -135,6 +136,9 @@ const characterHiddenStore = useCharacterHiddenStore()
|
||||||
const userInfoDialog = ref(false)
|
const userInfoDialog = ref(false)
|
||||||
const curSelectedUser = ref(null)
|
const curSelectedUser = ref(null)
|
||||||
|
|
||||||
|
const storeId = "characterHidden"
|
||||||
|
|
||||||
|
|
||||||
const handleOpenUserInfoDialog = (params) => {
|
const handleOpenUserInfoDialog = (params) => {
|
||||||
userInfoDialog.value = params.userInfoDialog
|
userInfoDialog.value = params.userInfoDialog
|
||||||
curSelectedUser.value = params.curSelectedUser
|
curSelectedUser.value = params.curSelectedUser
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,10 @@
|
||||||
import { onMounted, defineEmits, inject, defineProps } from "vue"
|
import { onMounted, defineEmits, inject, defineProps } from "vue"
|
||||||
import * as echarts from "echarts"
|
import * as echarts from "echarts"
|
||||||
import nodeHoverImg from "@/assets/images/nodeHover.png"
|
import nodeHoverImg from "@/assets/images/nodeHover.png"
|
||||||
|
import predictionNodeImg from "@/assets/images/linkPrediction/icon/prediction-node.png"
|
||||||
|
import charHiddenNodeImg from "@/assets/images/linkPrediction/icon/character-hidden-node.png"
|
||||||
|
import charInteractionHiddenNodeImg from "@/assets/images/linkPrediction/icon/character-Interaction-hidden-node.png"
|
||||||
|
import normalGroupNodeImg from "@/assets/images/linkPrediction/icon/normal-group-node.png"
|
||||||
let chart = null
|
let chart = null
|
||||||
const emit = defineEmits(["click:node", "click:edge"])
|
const emit = defineEmits(["click:node", "click:edge"])
|
||||||
const statisticsList = inject("statisticsList")
|
const statisticsList = inject("statisticsList")
|
||||||
|
|
@ -22,11 +26,39 @@ const props = defineProps({
|
||||||
interactionStore: {
|
interactionStore: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
storeId: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
console.log(props.storeId)
|
||||||
const initChart = () => {
|
const initChart = () => {
|
||||||
chart = echarts.init(document.getElementById("container"))
|
chart = echarts.init(document.getElementById("container"))
|
||||||
|
|
||||||
|
const imageSelect = (node) => {
|
||||||
|
if (props.storeId == "characterInteraction") {
|
||||||
|
if (node.isIncludePredictNodes) {
|
||||||
|
if (node.selfIncludeImplicitRelationship) {
|
||||||
|
return `image://${new URL(predictionNodeImg, import.meta.url)}`
|
||||||
|
} else {
|
||||||
|
return `image://${new URL(charInteractionHiddenNodeImg, import.meta.url)}`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return `image://${new URL(normalGroupNodeImg, import.meta.url)}`
|
||||||
|
}
|
||||||
|
} else if (props.storeId == "characterHidden") {
|
||||||
|
if (node.isIncludePredictNodes) {
|
||||||
|
if (node.selfIncludeImplicitRelationship) {
|
||||||
|
return `image://${new URL(predictionNodeImg, import.meta.url)}`
|
||||||
|
} else {
|
||||||
|
return `image://${new URL(charHiddenNodeImg, import.meta.url)}`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return `image://${new URL(normalGroupNodeImg, import.meta.url)}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
//处理社团节点
|
//处理社团节点
|
||||||
const nodes = Object.values(inject("communityNodeList") ?? []).map((item) => ({
|
const nodes = Object.values(inject("communityNodeList") ?? []).map((item) => ({
|
||||||
id: item.id,
|
id: item.id,
|
||||||
|
|
@ -35,7 +67,8 @@ const initChart = () => {
|
||||||
nodesNum: item.nodesNum,
|
nodesNum: item.nodesNum,
|
||||||
neighbors: item.neighbors,
|
neighbors: item.neighbors,
|
||||||
category: item.isIncludePredictNodes ? 1 : 0,
|
category: item.isIncludePredictNodes ? 1 : 0,
|
||||||
|
symbol: imageSelect(item),
|
||||||
|
symbolSize: 30,
|
||||||
selfIncludeImplicitRelationship:
|
selfIncludeImplicitRelationship:
|
||||||
item.neighbors.map((nei) => nei.id).includes(item.id) && //若该社团的id在该社团邻居中可以找到,说明自己这个社团中有互动隐关系
|
item.neighbors.map((nei) => nei.id).includes(item.id) && //若该社团的id在该社团邻居中可以找到,说明自己这个社团中有互动隐关系
|
||||||
item.neighbors.find((nei) => nei.id == item.id).isHidden
|
item.neighbors.find((nei) => nei.id == item.id).isHidden
|
||||||
|
|
@ -65,8 +98,8 @@ const initChart = () => {
|
||||||
const data = { nodes, links }
|
const data = { nodes, links }
|
||||||
|
|
||||||
const categories = [
|
const categories = [
|
||||||
{ name: "普通社团", category: 0, icon: "circle" },
|
{ name: "普通社团", category: 0, icon: `image://${new URL(normalGroupNodeImg, import.meta.url)}` },
|
||||||
{ name: "含预测节点社团", category: 1, icon: "circle" },
|
{ name: "含预测节点社团", category: 1, icon: `image://${new URL(predictionNodeImg, import.meta.url)}` },
|
||||||
{
|
{
|
||||||
name: props.interactionStore.predictionLegendContent,
|
name: props.interactionStore.predictionLegendContent,
|
||||||
category: 2,
|
category: 2,
|
||||||
|
|
@ -184,7 +217,7 @@ const initChart = () => {
|
||||||
animationDurationUpdate: 3500, // 节点移动更平滑
|
animationDurationUpdate: 3500, // 节点移动更平滑
|
||||||
data: data.nodes.map((node) => ({
|
data: data.nodes.map((node) => ({
|
||||||
...node,
|
...node,
|
||||||
symbolSize: node.nodesNum / 40 < 30 ? 40 : node.nodesNum / 40,
|
symbolSize: node.nodesNum / 10 < 30 ? 50 : 70,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color:
|
color:
|
||||||
node.isIncludePredictNodes === false
|
node.isIncludePredictNodes === false
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
@click:node="handleClickNode"
|
@click:node="handleClickNode"
|
||||||
@click:edge="handleClickEdge"
|
@click:edge="handleClickEdge"
|
||||||
:interaction-store="interactionStore"
|
:interaction-store="interactionStore"
|
||||||
|
:storeId="storeId"
|
||||||
></CommunityNode>
|
></CommunityNode>
|
||||||
<DetailNode
|
<DetailNode
|
||||||
v-else
|
v-else
|
||||||
|
|
@ -29,6 +30,10 @@ const props = defineProps({
|
||||||
interactionStore: {
|
interactionStore: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
|
},
|
||||||
|
storeId: {
|
||||||
|
type: String,
|
||||||
|
default: ""
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
const emit = defineEmits(["click:openUserInfoDialog"])
|
const emit = defineEmits(["click:openUserInfoDialog"])
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,10 @@
|
||||||
import { onMounted, onUnmounted, defineEmits, inject } from "vue" // 添加onUnmounted
|
import { onMounted, onUnmounted, defineEmits, inject } from "vue" // 添加onUnmounted
|
||||||
import * as echarts from "echarts"
|
import * as echarts from "echarts"
|
||||||
import nodeHoverImg from "@/assets/images/nodeHover.png"
|
import nodeHoverImg from "@/assets/images/nodeHover.png"
|
||||||
|
import predictionNodeImg from "@/assets/images/linkPrediction/icon/prediction-node.png"
|
||||||
|
import hiddenNodeImg from "@/assets/images/linkPrediction/icon/hidden-node.png"
|
||||||
|
import normalGroupNodeImg from "@/assets/images/linkPrediction/icon/normal-group-node.png"
|
||||||
|
|
||||||
|
|
||||||
let chart = null
|
let chart = null
|
||||||
let linkList = null
|
let linkList = null
|
||||||
|
|
@ -26,10 +30,24 @@ const communityNodeList = inject("communityNodeList");
|
||||||
const initChart = async () => {
|
const initChart = async () => {
|
||||||
chart = echarts.init(document.getElementById("container"))
|
chart = echarts.init(document.getElementById("container"))
|
||||||
|
|
||||||
|
const imageSelect = (node) => {
|
||||||
|
if (node.isIncludePredictNodes) {
|
||||||
|
if (node.selfIncludeImplicitRelationship) {
|
||||||
|
return `image://${new URL(predictionNodeImg, import.meta.url)}`
|
||||||
|
} else {
|
||||||
|
return `image://${new URL(hiddenNodeImg, import.meta.url)}`
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return `image://${new URL(normalGroupNodeImg, import.meta.url)}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//处理社团节点
|
//处理社团节点
|
||||||
const nodes = Object.values(communityNodeList).map((item) => ({
|
const nodes = Object.values(communityNodeList).map((item) => ({
|
||||||
id: (item.id),
|
id: (item.id),
|
||||||
name: (item.id),
|
name: (item.id),
|
||||||
|
symbol: imageSelect(item),
|
||||||
|
symbolSize: 30,
|
||||||
isIncludePredictNodes: item.isIncludePredictNodes,
|
isIncludePredictNodes: item.isIncludePredictNodes,
|
||||||
nodesNum: item.nodesNum,
|
nodesNum: item.nodesNum,
|
||||||
neighbors: item.neighbors.map((nei) => ({ ...nei, name: parseInt(nei.id) })),
|
neighbors: item.neighbors.map((nei) => ({ ...nei, name: parseInt(nei.id) })),
|
||||||
|
|
@ -65,8 +83,8 @@ const initChart = async () => {
|
||||||
const data = { nodes, links }
|
const data = { nodes, links }
|
||||||
|
|
||||||
const categories = [
|
const categories = [
|
||||||
{ name: "普通社团", category: 0, icon: `image://${new URL('@/assets/images/linkPrediction/icon/node-legend-icon.png', import.meta.url)}`},
|
{ name: "普通社团", category: 0, icon: `image://${new URL(normalGroupNodeImg, import.meta.url)}`},
|
||||||
{ name: "含预测节点社团", category: 1, icon: `image://${new URL('@/assets/images/linkPrediction/icon/community-legend-icon.png', import.meta.url)}`},
|
{ name: "含预测节点社团", category: 1, icon: `image://${new URL(predictionNodeImg, import.meta.url)}`},
|
||||||
{ name: "紧密团体关系", category: 2, icon: `image://${new URL('@/assets/images/linkPrediction/icon/tight-community-legend-icon.png', import.meta.url)}`}
|
{ name: "紧密团体关系", category: 2, icon: `image://${new URL('@/assets/images/linkPrediction/icon/tight-community-legend-icon.png', import.meta.url)}`}
|
||||||
]
|
]
|
||||||
const option = {
|
const option = {
|
||||||
|
|
@ -75,26 +93,6 @@ const initChart = async () => {
|
||||||
{
|
{
|
||||||
data: categories.map((c) => ({
|
data: categories.map((c) => ({
|
||||||
name: c.name,
|
name: c.name,
|
||||||
itemStyle: {
|
|
||||||
color:
|
|
||||||
c.category === 0
|
|
||||||
? new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
|
||||||
{ offset: 1, color: "#1a3860" }, // 深蓝渐变
|
|
||||||
{ offset: 0.5, color: "#38546b" },
|
|
||||||
{ offset: 0, color: "#5fb3b3" }
|
|
||||||
])
|
|
||||||
: c.category === 1
|
|
||||||
? new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
|
||||||
{ offset: 0, color: "#9eec9c" }, // 绿色渐变
|
|
||||||
{ offset: 0.37, color: "#aef295" },
|
|
||||||
{ offset: 1, color: "#c2f989" }
|
|
||||||
])
|
|
||||||
: new echarts.graphic.LinearGradient(1, 0, 0, 0, [
|
|
||||||
{ offset: 0, color: "#ff9a9e" }, // 红色渐变(用于 category === 2)
|
|
||||||
{ offset: 0.5, color: "#fad0c4" },
|
|
||||||
{ offset: 1, color: "#fbc2eb" }
|
|
||||||
])
|
|
||||||
},
|
|
||||||
icon: c.icon
|
icon: c.icon
|
||||||
})),
|
})),
|
||||||
right: 15,
|
right: 15,
|
||||||
|
|
@ -185,7 +183,7 @@ const initChart = async () => {
|
||||||
animationDurationUpdate: 3500, // 节点移动更平滑
|
animationDurationUpdate: 3500, // 节点移动更平滑
|
||||||
data: data.nodes.map((node) => ({
|
data: data.nodes.map((node) => ({
|
||||||
...node,
|
...node,
|
||||||
symbolSize: node.nodesNum / 40 < 30 ? 40 : node.nodesNum / 40,
|
symbolSize: node.nodesNum / 10 < 30 ? 50 : 70,
|
||||||
itemStyle: {
|
itemStyle: {
|
||||||
color:
|
color:
|
||||||
node.isIncludePredictNodes === false
|
node.isIncludePredictNodes === false
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user