anomalyPlot = vl.markPoint()
.data(correctedData)
.transform([
{
calculate: "datum['Power Consumption (kW)'] <= 2 || datum['Power Consumption (kW)'] >= 11 ? 'Anomaly' : 'Normal'",
as: "anomalyStatus"
}
])
.encode(
vl.x().fieldT("Timestamp").title("Time"),
vl.y().fieldQ("Power Consumption (kW)").scale({domain: [0, 13]}),
vl.color().fieldN("anomalyStatus").scale({
domain: ["Normal", "Anomaly"],
range: ["#86c5da", "#ff5a5a"]
}),
vl.opacity().value(0.5),
vl.tooltip([
{field: "Timestamp", type: "temporal"},
{field: "Power Consumption (kW)", type: "quantitative"},
{field: "anomalyStatus", type: "nominal"}
])
)
.width(800)
.height(400)
.title("Power Consumption Over Time (Anomalies Highlighted)")
.render()