【V5】Tooltip title 设置常量不生效 #5299
Answered
by
pearmini
BinghuiXie
asked this question in
Q&A
-
V5 中 Tooltip 的 title 设置常量不生效,只有设置 import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
theme: 'classic',
autoFit: true,
});
chart
.interval()
.data({
type: 'fetch',
value:
'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',
})
.encode('x', 'letter')
.encode('y', 'frequency')
.axis('y', { labelFormatter: '.0%' })
.tooltip({
title: '12345678',
items: [{ channel: 'x' }, { channel: 'y' }]
});
chart.interaction('tooltip', {
enterable: true
})
chart.render(); 看了下代码感觉是这里有一些问题 // src/runtime/transform.ts
export function extractTooltip(
I: number[],
mark: G2Mark,
context: TransformContext,
): [number[], G2Mark] {
// ...
const valueOf = (item) => {
if (!item) return item;
if (typeof item === 'string') {
// 这里的 value 取的是 data 上面的属性,由于传入的 item 是常量,所以这里拿到的是 undefined
return I.map((i) => ({ name: item, value: data[i][item] }))
}
// ...
}
// 导致在后面 initializeState 的时候,通过 titleOf 方法拿到的每个 element 上的 data 中的 title 就是 undefined
// src/runtime/plot.ts initializeState
function initializeState(
// ...
) {
// ...
const titleOf = (i) => tooltip.title?.[i]?.value;
// ...
const visualData: Record<string, any>[] = I.map((d, i) => {
const datum = {
points: P[i],
transform: T[i],
index: d,
markKey,
viewKey: key,
...(tooltip && {
// 这里拿到的 title 就是 undefined
title: titleOf(d),
items: itemsOf(d),
}),
};
// ...
} 在最终绘制 |
Beta Was this translation helpful? Give feedback.
Answered by
pearmini
Jul 12, 2023
Replies: 2 comments 1 reply
-
plot.ts 里面有 // runtime/plot.ts
function valueOf(
value: Primitive | ((d: any, i: number, array: any) => any),
datum: Record<string, any>,
i: number,
data: Record<string, any>,
) {
if (typeof value === 'function') return value(datum, i, data);
if (typeof value !== 'string') return value;
if (datum[value] !== undefined) return datum[value];
return value;
} |
Beta Was this translation helpful? Give feedback.
1 reply
-
目前可以通过 valueFormatter 实现该需求: import { Chart } from '@antv/g2';
const chart = new Chart({
container: 'container',
theme: 'classic',
autoFit: true,
});
chart
.interval()
.data({
type: 'fetch',
value:
'https://gw.alipayobjects.com/os/bmw-prod/fb9db6b7-23a5-4c23-bbef-c54a55fee580.csv',
})
.encode('x', 'letter')
.encode('y', 'frequency')
.axis('y', { labelFormatter: '.0%' })
.tooltip({
title: { valueFormatter: () => '123' } // 这里
})
chart.render(); |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
pearmini
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
目前可以通过 valueFormatter 实现该需求: