-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: add density mark, violin shape and kde transform #5043
Conversation
怎么使用 violinconst data = [
{
"species": "I. setosa",
"x": "PetalWidth",
"y": [0.2, 1, 2, 3, 4],
"size": [0.1, 0.3, 0.2, 0.2],
},
// ...
];
chart
.violin()
.encode('x', 'x')
.encode('y', 'y')
.encode('size', 'size')
.encode('color', 'species') |
如果 kde 只是对小提琴图有效果,可以直接封装成一个高阶 Mark,类似 boxplot。 chart
.violinPlot()
.data([]) // 聚合前的数据
.encode('color', 'species') |
理论上 kde 只对小提琴可用,kde 出来的数据就直接是小提琴的视觉位置。 |
查阅了两个参考资料:
可以简单理解小提琴图 = 箱线图 + 核密度图。 针对可视化聚合前后的数据应该有不同的方式。 聚合后用 density + box 绘制。 const data = fetchJSON('https://assets.antv.antgroup.com/g2/penguins.json');
const boxData = quartiles(data); // 聚合数据
const densityData = kde(data); // 聚合数据
chart.options({
type: 'view',
children: [
{ type: 'density', data: densityData, encode: { x, y, color: 'sex' } },
{
type: 'box',
data: boxData,
encode: {
x,
y,
color: 'sex',
shape: 'violin', // 需要给 box 新增一个 violin 的 shape
},
},
],
}); 在 ggplot 里面也有 density mark。 聚合前用 violinplot 绘制,这个是一个复合 Mark,由 box 和 density 构成,并且分别对数据进行预处理。 chart.options({
type: 'violinplot',
encode: {
x: 'species',
y: 'flipper_length_mm',
color: 'sex',
series: 'sex',
},
}); 在 matlibplot 里面就有 violinplot plot。 综上建议增加两个 mark:
以及给 box 增加一个新的 shape:violin,如下: |
如果参考 kde 的话,其实也可以讲 boxplot 中的数据分布函数也放到 data.transform 中,boxplot 封装中如果内置 data.transform,代码逻辑会简单很多。 |
fixed #5036
直接使用 violin mark,需外部 KDE
使用 内置 KDE