在一个画布内画出多个echarts图表

使用一个div渲染多个echarts图

1.需求描述

对于一个普通的echart图表,一般是一个div id渲染一个图表,每个图表在渲染上是独立的,一个div就代表一个canvas画布。但是如果需要使用一个div id 渲染多个图表(在一个画布上),就需要使用grid配置项分别对多个图表进行位置的配置。

2.效果

效果图

效果图

3.实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226

// 基于准备好的dom,初始化echarts实例
//只使用一个
var chart = echarts.init(document.getElementById("lineChart"))

var option
option = {
grid: [
// 调整每个图表的位置
{
//左边图表的位置
left: "10%",
right: "60%"
},
{
//右边图表的位置
left: "50%",
right: "20%"
}
],
dataZoom: [
{
type: "inside",
filterMode: "none"
},
{
type: "inside",
yAxisIndex: 1,//缩放单独控制
xAxisIndex: 1,
filterMode: "none"
}
],
legend: {
type: "scroll", // :可滚动翻页的图例。当图例数量较多时可以使用。
orient: "vertical",
x: "right",
//可以同时控制多个图表中有相同series的name的折线的显示与隐藏
data: ["2024-5-9 ZQ01", "2024-5-9 ZQ02", "2024-5-9 ZQ03"]
},
tooltip: {
show: true,
},
xAxis: [
{
type: "value",
name: "第一个X轴",
nameLocation: "middle", // x轴name处于x轴的什么位置
nameGap: 25, // x轴name与横坐标轴线的间距
axisLabel: {
show: true
},
splitLine: {
show: true
},
axisTick: {
show: true
},
axisLine: { show: true }
},
{
type: "value",
name: "第二个X轴",
nameLocation: "middle", // x轴name处于x轴的什么位置
nameGap: 25, // x轴name与横坐标轴线的间距
axisLabel: {
show: true
},
splitLine: {
show: true
},
axisTick: {
show: true
},
axisLine: { show: true },
gridIndex: 1
}
],
yAxis: [
{
type: "category",
name: "深度(m)",
inverse: true,
nameGap: 25,
nameLocation: "middle",
axisLine: { onZero: true },
splitLine: {
show: true
},
axisLabel: {
show: true
},
boundaryGap: true,
axisTick: {
show: true
},
data: [1, 2, 3, 4, 5]
},
{
type: "category",
name: "深度(m)",
inverse: true,
nameGap: 25,
nameLocation: "middle",
axisLine: { onZero: true },
splitLine: {
show: true
},
axisLabel: {
show: true
},
boundaryGap: true,
axisTick: {
show: true
},
data: [6, 5, 3, 2, 4],
gridIndex: 1
}
],
series: [
{
name: "2024-5-9 ZQ01",
type: "line",
symbol: "circle",
smooth: true,
symbolSize: 8,
showAllSymbol: true, //标注所有数据点
lineStyle: {
width: 2,
symbolSize: 5
},
emphasis: {
lineStyle: {
width: 3 // hover时的折线宽度
},
itemStyle: {
shadowBlur: 10, // 阴影的模糊大小
shadowColor: "rgba(0, 0, 0, 0.5)", // 阴影颜色为半透明的黑色
shadowOffsetX: 0, // 阴影的水平偏移量
shadowOffsetY: 0 // 阴影的垂直偏移量
}
},
data: [6, 7, 8, 9, 10]
},
{
name: "2024-5-9 ZQ02",
type: "line",
symbol: "circle",
smooth: true,
symbolSize: 8,
showAllSymbol: true, //标注所有数据点
lineStyle: {
width: 2,
symbolSize: 5
},
emphasis: {
lineStyle: {
width: 3 // hover时的折线宽度
},
itemStyle: {
shadowBlur: 10, // 阴影的模糊大小
shadowColor: "rgba(0, 0, 0, 0.5)", // 阴影颜色为半透明的黑色
shadowOffsetX: 0, // 阴影的水平偏移量
shadowOffsetY: 0 // 阴影的垂直偏移量
}
},
data: [6, 0, 11, 9, 10]
},
{
name: "2024-5-9 ZQ01",
type: "line",
symbol: "circle",
smooth: true,
symbolSize: 8,
showAllSymbol: true, //标注所有数据点
lineStyle: {
width: 2,
symbolSize: 5
},
emphasis: {
lineStyle: {
width: 3 // hover时的折线宽度
},
itemStyle: {
shadowBlur: 10, // 阴影的模糊大小
shadowColor: "rgba(0, 0, 0, 0.5)", // 阴影颜色为半透明的黑色
shadowOffsetX: 0, // 阴影的水平偏移量
shadowOffsetY: 0 // 阴影的垂直偏移量
}
},
data: [9, 0, 5, 3, 5],
xAxisIndex: 1,
yAxisIndex: 1
},
{
name: "2024-5-9 ZQ02",
type: "line",
symbol: "circle",
smooth: true,
symbolSize: 8,
showAllSymbol: true, //标注所有数据点
lineStyle: {
width: 2,
symbolSize: 5
},
emphasis: {
lineStyle: {
width: 3 // hover时的折线宽度
},
itemStyle: {
shadowBlur: 10, // 阴影的模糊大小
shadowColor: "rgba(0, 0, 0, 0.5)", // 阴影颜色为半透明的黑色
shadowOffsetX: 0, // 阴影的水平偏移量
shadowOffsetY: 0 // 阴影的垂直偏移量
}
},
data: [6, 2, 1, 3, 5],
xAxisIndex: 1,
yAxisIndex: 1
}
]
}

chart.setOption(option, true)
window.addEventListener("resize", () => {
chart.resize()
})

在一个画布内画出多个echarts图表
https://chen77.top/2024/05/09/demandPool/在一个画布内画出多个echarts图表/
作者
小陈
发布于
2024年5月9日
许可协议