Public
Edited
Apr 15, 2023
1 star
Insert cell
Insert cell
CAMPI_id_rates_2.csv
Type Table, then Shift-Enter. Ctrl-space for more options.

Insert cell
processedData = {
const result = [];
rawData.forEach(d => {
result.push({sample: d.sample, type: "dot", off: 1, db: "REF", FDR: "0.001", engine: "X!Tandem", rate: d["ID rate REF X!Tandem 0.1% FDR"]});
result.push({sample: d.sample, type: "dot", off: 1, db: "REF", FDR: "0.001", engine: "MS2Rescore", rate: d["ID rate REF MS2Rescore 0.1% FDR"]});
result.push({sample: d.sample, type: "line", off: 1, db: "REF", FDR: "0.001", x: d["ID rate REF X!Tandem 0.1% FDR"], ms: d["ID rate REF MS2Rescore 0.1% FDR"]});
result.push({sample: d.sample, type: "dot", off: 2, db: "REF", FDR: "0.01", engine: "X!Tandem", rate: d["ID rate REF X!Tandem 1% FDR"]});
result.push({sample: d.sample, type: "dot", off: 2, db: "REF", FDR: "0.01", engine: "MS2Rescore", rate: d["ID rate REF MS2Rescore 1% FDR"]});
result.push({sample: d.sample, type: "line", off: 2, db: "REF", FDR: "0.01", x: d["ID rate REF X!Tandem 1% FDR"], ms: d["ID rate REF MS2Rescore 1% FDR"]});
result.push({sample: d.sample, type: "dot", off: 3, db: "MO", FDR: "0.001", engine: "X!Tandem", rate: d["ID rate MO X!Tandem 0.1% FDR"]});
result.push({sample: d.sample, type: "dot", off: 3, db: "MO", FDR: "0.001", engine: "MS2Rescore", rate: d["ID rate MO MS2Rescore 0.1% FDR"]});
result.push({sample: d.sample, type: "line", off: 3, db: "MO", FDR: "0.001", x: d["ID rate MO X!Tandem 0.1% FDR"], ms: d["ID rate MO MS2Rescore 0.1% FDR"]});
result.push({sample: d.sample, type: "dot", off: 4, db: "MO", FDR: "0.01", engine: "X!Tandem", rate: d["ID rate MO X!Tandem 1% FDR"]});
result.push({sample: d.sample, type: "dot", off: 4, db: "MO", FDR: "0.01", engine: "MS2Rescore", rate: d["ID rate MO MS2Rescore 1% FDR"]});
result.push({sample: d.sample, type: "line", off: 4, db: "MO", FDR: "0.01", x: d["ID rate MO X!Tandem 1% FDR"], ms: d["ID rate MO MS2Rescore 1% FDR"]});
});
return result;
}
Insert cell
{
const circles = vl.markCircle({opacity: 1})
.encode(
vl.x().fieldQ("rate").title("Identification rate"),
vl.y().field("sample").title(null),
{yOffset: {field: "FDR", type: "ordinal"/*, scale: {range: [0, 15]}*/}},
vl.color().field("engine").legend({orient: "bottom", title: null}).sort("reverse")
);
const lines = vl.markLine({color: "gray"})
.encode(
vl.y().field("sample"),
{yOffset: {field: "FDR", type: "ordinal"}},
vl.x().fieldQ("x"),
vl.x2().fieldQ("ms")
);
return vl.layer(lines, circles)
.facet({field: "db", title: null}).columns(5)
.data(processedData)
.config({view: {step: 10}})
.render();
}
Insert cell
{
const circles = vl.markPoint({opacity: 1, filled: true, size: 50})
.encode(
vl.x().fieldQ("rate").title("Identification rate (%)"),
vl.y().field("sample").title(null),
{yOffset: {field: "off", type: "ordinal"/*, scale: {range: [0, 15]}*/}},
vl.color().field("engine").legend({title: "Engine"}).sort("reverse"),
vl.shape().field("db").legend({title: "Database"}).sort("reverse")
);
const lines = vl.markLine({color: "gray"})
.encode(
vl.y().field("sample"),
{yOffset: {field: "off", type: "ordinal"}},
vl.strokeDash().field("FDR").legend({format: ".1%"}),
vl.x().fieldQ("x"),
vl.x2().fieldQ("ms")
);
return vl.layer(lines, circles)
.data(processedData.filter(d => d.sample.startsWith("S")))
.width(400)
.config({view: {step: 10}})
.render();
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more