{
const data = snpNames.flatMap((name, i) => {
const q = mafs[i];
return [
{ name, type: "Homozygous reference", value: (1 - q) ** 2, order: 1 },
{ name, type: "Heterozygous", value: 2 * (1 - q) * q, order: 2 },
{ name, type: "Homozygous alternate", value: q ** 2, order: 3 }
];
});
console.log(data);
return Plot.plot({
marginLeft: 150,
height: snpNames.length * 9,
title: "Allele dosage distribution for European ancestry",
style: {
fontSize: "8px"
},
x: {
axis: "top",
grid: true,
label: "Distribution"
},
y: {
label: null,
domain: snpNames,
lineAnchor: "right",
padding: 0.1,
fontSize: 1
},
color: {
domain: ["Homozygous reference", "Heterozygous", "Homozygous alternate"],
range: ["#0297b8", "#eda6af", "#b2182b"],
legend: true
},
marks: [
Plot.barX(data, {
x: "value",
y: "name",
fill: "type",
order: "order",
tip: true,
title: (d) => `${d.type}: ${d.value.toFixed(3)}`
})
]
});
}