diff --git a/perf/go/chromeperf/anomalyApi.go b/perf/go/chromeperf/anomalyApi.go
index 6a33b17..1cddafa 100644
--- a/perf/go/chromeperf/anomalyApi.go
+++ b/perf/go/chromeperf/anomalyApi.go
@@ -168,7 +168,7 @@
 	ReportRegression(ctx context.Context, testPath string, startCommitPosition int32, endCommitPosition int32, projectId string, isImprovement bool, botName string, internal bool, medianBefore float32, medianAfter float32) (*ReportRegressionResponse, error)
 
 	// GetAnomalyFromUrlSafeKey returns the anomaly details based on the urlsafe key.
-	GetAnomalyFromUrlSafeKey(ctx context.Context, key string) (startCommit int, endCommit int, queryParams map[string][]string, err error)
+	GetAnomalyFromUrlSafeKey(ctx context.Context, key string) (map[string][]string, Anomaly, error)
 
 	// GetAnomalies retrieves anomalies for a given set of traces within the supplied commit positions.
 	GetAnomalies(ctx context.Context, traceNames []string, startCommitPosition int, endCommitPosition int) (AnomalyMap, error)
@@ -249,25 +249,25 @@
 }
 
 // GetAnomalyFromUrlSafeKey returns the anomaly details based on the urlsafe key.
-func (cp *anomalyApiClientImpl) GetAnomalyFromUrlSafeKey(ctx context.Context, key string) (int, int, map[string][]string, error) {
+func (cp *anomalyApiClientImpl) GetAnomalyFromUrlSafeKey(ctx context.Context, key string) (map[string][]string, Anomaly, error) {
 	getAnomaliesResp := &GetAnomaliesResponse{}
+	var anomaly Anomaly
 	err := cp.chromeperfClient.sendGetRequest(ctx, AnomalyAPIName, GetFuncName, url.Values{"key": {key}}, getAnomaliesResp)
 	if err != nil {
-		return -1, -1, nil, skerr.Wrapf(err, "Failed to get anomaly data based on url safe key: %s", key)
+		return nil, anomaly, skerr.Wrapf(err, "Failed to get anomaly data based on url safe key: %s", key)
 	}
 
-	var startCommit, endCommit int
 	var queryParams map[string][]string
+
 	if len(getAnomaliesResp.Anomalies) > 0 {
-		for testPath, anomaly := range getAnomaliesResp.Anomalies {
+		for testPath, respAnomaly := range getAnomaliesResp.Anomalies {
 			queryParams = getParams(testPath)
-			startCommit = anomaly[0].StartRevision
-			endCommit = anomaly[0].EndRevision
+			anomaly = respAnomaly[0]
 			break
 		}
 	}
 
-	return startCommit, endCommit, queryParams, nil
+	return queryParams, anomaly, nil
 }
 
 // GetAnomalies implements AnomalyApiClient, it calls chrome perf API to fetch anomlies.
diff --git a/perf/go/chromeperf/anomalyApi_test.go b/perf/go/chromeperf/anomalyApi_test.go
index 83c1bd2..faa6130 100644
--- a/perf/go/chromeperf/anomalyApi_test.go
+++ b/perf/go/chromeperf/anomalyApi_test.go
@@ -138,10 +138,10 @@
 	cpClient, err := newChromePerfClient(context.Background(), ts.URL)
 	assert.Nil(t, err, "No error expected when creating a new client.")
 	anomalyClient := newAnomalyApiClient(cpClient)
-	start, end, params, err := anomalyClient.GetAnomalyFromUrlSafeKey(ctx, "someKey")
+	params, anomalyResp, err := anomalyClient.GetAnomalyFromUrlSafeKey(ctx, "someKey")
 	assert.Nil(t, err)
-	assert.Equal(t, anomaly.StartRevision, start)
-	assert.Equal(t, anomaly.EndRevision, end)
+	assert.Equal(t, anomaly.StartRevision, anomalyResp.StartRevision)
+	assert.Equal(t, anomaly.EndRevision, anomalyResp.EndRevision)
 	assert.Equal(t, master, params["master"][0])
 	assert.Equal(t, bot, params["bot"][0])
 	assert.Equal(t, benchmark, params["benchmark"][0])
diff --git a/perf/go/chromeperf/mock/AnomalyApiClient.go b/perf/go/chromeperf/mock/AnomalyApiClient.go
index c99e4f9..fd7c714 100644
--- a/perf/go/chromeperf/mock/AnomalyApiClient.go
+++ b/perf/go/chromeperf/mock/AnomalyApiClient.go
@@ -108,47 +108,40 @@
 }
 
 // GetAnomalyFromUrlSafeKey provides a mock function with given fields: ctx, key
-func (_m *AnomalyApiClient) GetAnomalyFromUrlSafeKey(ctx context.Context, key string) (int, int, map[string][]string, error) {
+func (_m *AnomalyApiClient) GetAnomalyFromUrlSafeKey(ctx context.Context, key string) (map[string][]string, chromeperf.Anomaly, error) {
 	ret := _m.Called(ctx, key)
 
 	if len(ret) == 0 {
 		panic("no return value specified for GetAnomalyFromUrlSafeKey")
 	}
 
-	var r0 int
-	var r1 int
-	var r2 map[string][]string
-	var r3 error
-	if rf, ok := ret.Get(0).(func(context.Context, string) (int, int, map[string][]string, error)); ok {
+	var r0 map[string][]string
+	var r1 chromeperf.Anomaly
+	var r2 error
+	if rf, ok := ret.Get(0).(func(context.Context, string) (map[string][]string, chromeperf.Anomaly, error)); ok {
 		return rf(ctx, key)
 	}
-	if rf, ok := ret.Get(0).(func(context.Context, string) int); ok {
+	if rf, ok := ret.Get(0).(func(context.Context, string) map[string][]string); ok {
 		r0 = rf(ctx, key)
 	} else {
-		r0 = ret.Get(0).(int)
-	}
-
-	if rf, ok := ret.Get(1).(func(context.Context, string) int); ok {
-		r1 = rf(ctx, key)
-	} else {
-		r1 = ret.Get(1).(int)
-	}
-
-	if rf, ok := ret.Get(2).(func(context.Context, string) map[string][]string); ok {
-		r2 = rf(ctx, key)
-	} else {
-		if ret.Get(2) != nil {
-			r2 = ret.Get(2).(map[string][]string)
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(map[string][]string)
 		}
 	}
 
-	if rf, ok := ret.Get(3).(func(context.Context, string) error); ok {
-		r3 = rf(ctx, key)
+	if rf, ok := ret.Get(1).(func(context.Context, string) chromeperf.Anomaly); ok {
+		r1 = rf(ctx, key)
 	} else {
-		r3 = ret.Error(3)
+		r1 = ret.Get(1).(chromeperf.Anomaly)
 	}
 
-	return r0, r1, r2, r3
+	if rf, ok := ret.Get(2).(func(context.Context, string) error); ok {
+		r2 = rf(ctx, key)
+	} else {
+		r2 = ret.Error(2)
+	}
+
+	return r0, r1, r2
 }
 
 // ReportRegression provides a mock function with given fields: ctx, testPath, startCommitPosition, endCommitPosition, projectId, isImprovement, botName, internal, medianBefore, medianAfter
diff --git a/perf/go/frontend/api/regressionsApi.go b/perf/go/frontend/api/regressionsApi.go
index 9205d03..551484a 100644
--- a/perf/go/frontend/api/regressionsApi.go
+++ b/perf/go/frontend/api/regressionsApi.go
@@ -5,6 +5,7 @@
 	"encoding/json"
 	"fmt"
 	"net/http"
+	"net/url"
 	"sort"
 	"strconv"
 	"strings"
@@ -417,7 +418,7 @@
 	key := r.URL.Query().Get("key")
 	ctx, span := trace.StartSpan(ctx, "anomalyGetRequest")
 	defer span.End()
-	startCommit, endCommit, queryParams, err := rApi.anomalyApiClient.GetAnomalyFromUrlSafeKey(ctx, key)
+	queryParams, anomaly, err := rApi.anomalyApiClient.GetAnomalyFromUrlSafeKey(ctx, key)
 	if err != nil {
 		httputils.ReportError(w, err, "Error retrieving anomaly data", http.StatusBadRequest)
 		return
@@ -439,14 +440,15 @@
 		Graphs: graphs,
 	}
 
+	graphQueryParams := getGraphQueryParamsForAnomalyId([]string{strconv.Itoa(anomaly.Id)})
 	var redirectUrl string
 	shortcutId, err := rApi.graphsShortcutStore.InsertShortcut(ctx, &shortcutObj)
 	if err != nil {
 		// Something went wrong while inserting shortcut. Let's fall back to the explore page.
 		sklog.Errorf("Error inserting shortcut %s", err)
-		redirectUrl = rApi.urlProvider.Explore(ctx, startCommit, endCommit, queryParams, false)
+		redirectUrl = rApi.urlProvider.Explore(ctx, anomaly.StartRevision, anomaly.EndRevision, queryParams, true, graphQueryParams)
 	} else {
-		redirectUrl = rApi.urlProvider.MultiGraph(ctx, startCommit, endCommit, shortcutId, false)
+		redirectUrl = rApi.urlProvider.MultiGraph(ctx, anomaly.StartRevision, anomaly.EndRevision, shortcutId, true, graphQueryParams)
 	}
 
 	sklog.Infof("Generated url: %s", redirectUrl)
@@ -498,14 +500,14 @@
 				sklog.Errorf("Error inserting shortcut %s", err)
 				// Let's redirect the user to the explore page instead.
 				queryParams := alertGroupDetails.GetQueryParams(ctx)
-				redirectUrl = rApi.urlProvider.Explore(ctx, int(alertGroupDetails.StartCommitNumber), int(alertGroupDetails.EndCommitNumber), queryParams, false)
+				redirectUrl = rApi.urlProvider.Explore(ctx, int(alertGroupDetails.StartCommitNumber), int(alertGroupDetails.EndCommitNumber), queryParams, false, nil)
 			} else {
-				redirectUrl = rApi.urlProvider.MultiGraph(ctx, int(alertGroupDetails.StartCommitNumber), int(alertGroupDetails.EndCommitNumber), shortcutId, false)
+				redirectUrl = rApi.urlProvider.MultiGraph(ctx, int(alertGroupDetails.StartCommitNumber), int(alertGroupDetails.EndCommitNumber), shortcutId, false, nil)
 			}
 
 		} else {
 			queryParams := alertGroupDetails.GetQueryParams(ctx)
-			redirectUrl = rApi.urlProvider.Explore(ctx, int(alertGroupDetails.StartCommitNumber), int(alertGroupDetails.EndCommitNumber), queryParams, false)
+			redirectUrl = rApi.urlProvider.Explore(ctx, int(alertGroupDetails.StartCommitNumber), int(alertGroupDetails.EndCommitNumber), queryParams, false, nil)
 		}
 		sklog.Infof("Generated url: %s", redirectUrl)
 		http.Redirect(w, r, redirectUrl, http.StatusSeeOther)
@@ -637,3 +639,9 @@
 		sklog.Errorf("Failed to encode paramset: %s", err)
 	}
 }
+
+func getGraphQueryParamsForAnomalyId(anomalyIds []string) url.Values {
+	return url.Values{
+		"highlight_anomalies": anomalyIds,
+	}
+}
diff --git a/perf/go/frontend/frontend.go b/perf/go/frontend/frontend.go
index 003f6ba..088e355 100644
--- a/perf/go/frontend/frontend.go
+++ b/perf/go/frontend/frontend.go
@@ -707,13 +707,17 @@
 	revisionInfoMap := map[string]chromeperf.RevisionInfo{}
 	for _, anomalyData := range anomaliesForRevision {
 		key := anomalyData.GetKey()
+		queryParams := url.Values{
+			"highlight_anomalies": []string{strconv.Itoa(anomalyData.Anomaly.Id)},
+		}
 		if _, ok := revisionInfoMap[key]; !ok {
 			exploreUrl := f.urlProvider.Explore(
 				ctx,
 				anomalyData.StartRevision,
 				anomalyData.EndRevision,
 				anomalyData.Params,
-				true)
+				true,
+				queryParams)
 			bugId := ""
 			if anomalyData.Anomaly.BugId > 0 {
 				bugId = strconv.Itoa(anomalyData.Anomaly.BugId)
diff --git a/perf/go/urlprovider/urlprovider.go b/perf/go/urlprovider/urlprovider.go
index 53fcba7..e3d62cb 100644
--- a/perf/go/urlprovider/urlprovider.go
+++ b/perf/go/urlprovider/urlprovider.go
@@ -16,27 +16,19 @@
 }
 
 // Explore generates a url to the explore page for the given parameters
-func (prov *URLProvider) Explore(ctx context.Context, startCommitNumber int, endCommitNumber int, parameters map[string][]string, disableFilterParentTraces bool) string {
-	queryUrl := url.Values{}
-	prov.fillCommonParams(ctx, queryUrl, startCommitNumber, endCommitNumber)
+func (prov *URLProvider) Explore(ctx context.Context, startCommitNumber int, endCommitNumber int, parameters map[string][]string, disableFilterParentTraces bool, queryParams url.Values) string {
+	queryUrl := prov.getQueryParams(ctx, startCommitNumber, endCommitNumber, disableFilterParentTraces, queryParams)
+
 	// Now let's look at the parameters for the query
-
 	queryUrl["queries"] = []string{prov.GetQueryStringFromParameters(parameters)}
-	if disableFilterParentTraces {
-		queryUrl["disable_filter_parent_traces"] = []string{"true"}
-	}
-
 	return "/e/?" + queryUrl.Encode()
 }
 
-func (prov *URLProvider) MultiGraph(ctx context.Context, startCommitNumber int, endCommitNumber int, shortcutId string, disableFilterParentTraces bool) string {
-	queryUrl := url.Values{}
-	prov.fillCommonParams(ctx, queryUrl, startCommitNumber, endCommitNumber)
-	queryUrl["shortcut"] = []string{shortcutId}
-	if disableFilterParentTraces {
-		queryUrl["disable_filter_parent_traces"] = []string{"true"}
-	}
+// MultiGraph generates a url to the multigraph page for the given parameters.
+func (prov *URLProvider) MultiGraph(ctx context.Context, startCommitNumber int, endCommitNumber int, shortcutId string, disableFilterParentTraces bool, queryParams url.Values) string {
+	queryUrl := prov.getQueryParams(ctx, startCommitNumber, endCommitNumber, disableFilterParentTraces, queryParams)
 
+	queryUrl["shortcut"] = []string{shortcutId}
 	return "/m/?" + queryUrl.Encode()
 }
 
@@ -68,3 +60,19 @@
 	endTime := time.Unix(endCommit.Timestamp, 0).AddDate(0, 0, 1)
 	queryUrl["end"] = []string{strconv.Itoa(int(endTime.Unix()))}
 }
+
+func (prov *URLProvider) getQueryParams(ctx context.Context, startCommitNumber int, endCommitNumber int, disableFilterParentTraces bool, queryParams url.Values) url.Values {
+	queryUrl := url.Values{}
+	prov.fillCommonParams(ctx, queryUrl, startCommitNumber, endCommitNumber)
+	if disableFilterParentTraces {
+		queryUrl["disable_filter_parent_traces"] = []string{"true"}
+	}
+
+	if queryParams != nil {
+		for paramKey, paramValues := range queryParams {
+			queryUrl[paramKey] = paramValues
+		}
+	}
+
+	return queryUrl
+}
diff --git a/perf/go/urlprovider/urlprovider_test.go b/perf/go/urlprovider/urlprovider_test.go
index 6a0f205..d2ae048 100644
--- a/perf/go/urlprovider/urlprovider_test.go
+++ b/perf/go/urlprovider/urlprovider_test.go
@@ -25,7 +25,7 @@
 		"param2": {"value2"},
 		"param3": {"value3"},
 	}
-	queryurl := urlProvider.Explore(context.Background(), 1234, 5678, params, false)
+	queryurl := urlProvider.Explore(context.Background(), 1234, 5678, params, false, nil)
 	assert.NotNil(t, queryurl, "Url expected to be generated")
 	queryIndex := strings.Index(queryurl, "&queries=")
 	assert.NotEqual(t, -1, queryIndex)
@@ -57,7 +57,7 @@
 		assert.Equal(t, parsed_query.Get("param3"), "value3")
 	}
 	// Test with disableParentFilterTraces = false
-	queryurl := urlProvider.Explore(context.Background(), 1234, 5678, params, false)
+	queryurl := urlProvider.Explore(context.Background(), 1234, 5678, params, false, nil)
 	assert.NotNil(t, queryurl, "Url expected to be generated")
 	queryIndex := strings.Index(queryurl, "&queries=")
 	assert.NotEqual(t, -1, queryIndex)
@@ -67,7 +67,7 @@
 	assert.Equal(t, -1, disableParentArgIndex)
 
 	// Test with disableParentFilterTraces = true
-	queryurl = urlProvider.Explore(context.Background(), 1234, 5678, params, true)
+	queryurl = urlProvider.Explore(context.Background(), 1234, 5678, params, true, nil)
 	assert.NotNil(t, queryurl, "Url expected to be generated")
 	queryIndex = strings.Index(queryurl, "&queries=")
 	assert.NotEqual(t, -1, queryIndex)
@@ -84,7 +84,7 @@
 	shortcutId := "shortcutId"
 
 	// Test with disableParentFilterTraces = false
-	queryurl := urlProvider.MultiGraph(context.Background(), 1234, 5678, shortcutId, false)
+	queryurl := urlProvider.MultiGraph(context.Background(), 1234, 5678, shortcutId, false, nil)
 	assert.NotNil(t, queryurl, "Url expected to be generated")
 	multiGraphIndex := strings.Index(queryurl, "/m/?")
 	assert.NotEqual(t, -1, multiGraphIndex)
@@ -94,7 +94,7 @@
 	assert.Equal(t, -1, disableParentArgIndex)
 
 	// Test with disableParentFilterTraces = true
-	queryurl = urlProvider.MultiGraph(context.Background(), 1234, 5678, shortcutId, true)
+	queryurl = urlProvider.MultiGraph(context.Background(), 1234, 5678, shortcutId, true, nil)
 	assert.NotNil(t, queryurl, "Url expected to be generated")
 	multiGraphIndex = strings.Index(queryurl, "/m/?")
 	assert.NotEqual(t, -1, multiGraphIndex)
diff --git a/perf/modules/anomaly-sk/anomaly-sk.ts b/perf/modules/anomaly-sk/anomaly-sk.ts
index c0ff613..3e6f25a 100644
--- a/perf/modules/anomaly-sk/anomaly-sk.ts
+++ b/perf/modules/anomaly-sk/anomaly-sk.ts
@@ -56,7 +56,8 @@
 export const getAnomalyDataMap = (
   traceSet: TraceSet,
   header: (ColumnHeader | null)[],
-  anomalymap: AnomalyMap
+  anomalymap: AnomalyMap,
+  highlight_anomalies: string[]
 ): { [key: string]: AnomalyData[] } => {
   const anomalyDataMap: { [traceId: string]: AnomalyData[] } = {};
 
@@ -82,10 +83,17 @@
               // we show the anomaly on the next available data point instead of not
               // displaying it at all.
               if (columnHeader!.offset >= cid) {
+                const currentAnomaly = cidAnomalyMap[cid];
+                // If the currentAnomaly is present in the highlight list, mark it for highlighting.
+                const highlight =
+                  highlight_anomalies !== null &&
+                  highlight_anomalies.includes(currentAnomaly.id.toString());
+
                 anomalyDataMap[traceId].push({
                   anomaly: cidAnomalyMap[cid],
                   x: i,
                   y: trace[i],
+                  highlight: highlight,
                 });
                 break;
               }
diff --git a/perf/modules/anomaly-sk/anomaly-sk_test.ts b/perf/modules/anomaly-sk/anomaly-sk_test.ts
index 2fac4d0..ea6581f 100644
--- a/perf/modules/anomaly-sk/anomaly-sk_test.ts
+++ b/perf/modules/anomaly-sk/anomaly-sk_test.ts
@@ -74,6 +74,7 @@
         x: 2,
         y: 15,
         anomaly: anomalyA,
+        highlight: false,
       },
     ],
     traceB: [
@@ -81,6 +82,7 @@
         x: 2,
         y: 4,
         anomaly: anomalyB,
+        highlight: false,
       },
     ],
   };
@@ -88,7 +90,8 @@
     const anomalyDataMap = getAnomalyDataMap(
       dataframe.traceset,
       dataframe.header!,
-      anomalymap
+      anomalymap,
+      []
     );
     assert.deepEqual(anomalyDataMap, expectedAnomalyDataMap);
   });
@@ -104,7 +107,8 @@
     const dataMap = getAnomalyDataMap(
       dataframe.traceset,
       dataframe.header!,
-      anomalymap
+      anomalymap,
+      []
     );
     const expectedAnomalyMap: { [key: string]: AnomalyData[] } = {
       traceA: [
@@ -112,6 +116,7 @@
           x: 3,
           y: 200,
           anomaly: anomalyA,
+          highlight: false,
         },
       ],
     };
diff --git a/perf/modules/explore-multi-sk/explore-multi-sk.ts b/perf/modules/explore-multi-sk/explore-multi-sk.ts
index c82d83d..182e7b3 100644
--- a/perf/modules/explore-multi-sk/explore-multi-sk.ts
+++ b/perf/modules/explore-multi-sk/explore-multi-sk.ts
@@ -68,6 +68,8 @@
   plotSummary: boolean = false;
 
   useTestPicker: boolean = false;
+
+  highlight_anomalies: string[] = [];
 }
 
 export class ExploreMultiSk extends ElementSk {
@@ -388,6 +390,7 @@
       labelMode: LabelMode.Date,
       disable_filter_parent_traces: explore.state.disable_filter_parent_traces,
       plotSummary: this.state.plotSummary,
+      highlight_anomalies: this.state.highlight_anomalies,
     };
     explore.state = newState;
   }
diff --git a/perf/modules/explore-simple-sk/explore-simple-sk.ts b/perf/modules/explore-simple-sk/explore-simple-sk.ts
index aec9127..5b5b5d7 100644
--- a/perf/modules/explore-simple-sk/explore-simple-sk.ts
+++ b/perf/modules/explore-simple-sk/explore-simple-sk.ts
@@ -307,6 +307,8 @@
   disable_filter_parent_traces: boolean = false;
 
   plotSummary: boolean = false;
+
+  highlight_anomalies: string[] = [];
 }
 
 // TODO(jcgregorio) Move to a 'key' module.
@@ -1499,7 +1501,8 @@
       const anomalyDataMap = getAnomalyDataMap(
         selectedTraceSet,
         columnHeader,
-        anomalyMap
+        anomalyMap,
+        this.state.highlight_anomalies
       );
       this.plot!.anomalyDataMap = anomalyDataMap;
     }
@@ -2206,7 +2209,8 @@
       const anomalyDataMap = getAnomalyDataMap(
         mergedDataframe.traceset,
         mergedDataframe.header!,
-        json.anomalymap
+        json.anomalymap,
+        this.state.highlight_anomalies
       );
       this.plot!.anomalyDataMap = anomalyDataMap;
     }
@@ -2322,7 +2326,7 @@
   addToAnomalyMap(newAnomalyMap: AnomalyMap): void {
     if (this.isEmptyMap(this.fullAnomalyMap)) {
       this.fullAnomalyMap = newAnomalyMap;
-    } else {
+    } else if (!this.isEmptyMap(newAnomalyMap)) {
       Object.keys(newAnomalyMap!).forEach((key) => {
         const existingMap = this.fullAnomalyMap![key];
         if (this.isEmptyMap(existingMap)) {
diff --git a/perf/modules/plot-simple-sk/plot-simple-sk-demo.ts b/perf/modules/plot-simple-sk/plot-simple-sk-demo.ts
index a40b2e6..4400f59 100644
--- a/perf/modules/plot-simple-sk/plot-simple-sk-demo.ts
+++ b/perf/modules/plot-simple-sk/plot-simple-sk-demo.ts
@@ -154,11 +154,13 @@
           x: 5,
           y: traces[id][5],
           anomaly: dummyAnomaly(false),
+          highlight: true,
         },
         {
           x: 20,
           y: traces[id][20],
           anomaly: dummyAnomaly(true),
+          highlight: false,
         },
       ];
     }
diff --git a/perf/modules/plot-simple-sk/plot-simple-sk.ts b/perf/modules/plot-simple-sk/plot-simple-sk.ts
index e65394c..65ab8d5 100644
--- a/perf/modules/plot-simple-sk/plot-simple-sk.ts
+++ b/perf/modules/plot-simple-sk/plot-simple-sk.ts
@@ -395,6 +395,7 @@
   x: number;
   y: number;
   anomaly: Anomaly;
+  highlight: boolean;
 }
 
 export interface MousePosition {
@@ -683,6 +684,8 @@
 
   private ANOMALY_BACKGROUND!: string; // CSS color.
 
+  private ANOMALY_HIGHLIGHT_COLOR!: string; // CSS color.
+
   private REGRESSION_COLOR!: string; // CSS color.
 
   private IMPROVEMENT_COLOR!: string; // CSS color.
@@ -1113,6 +1116,7 @@
     this.ANOMALY_BACKGROUND = style.getPropertyValue('--on-surface');
     this.IMPROVEMENT_COLOR = style.getPropertyValue('--success');
     this.REGRESSION_COLOR = style.getPropertyValue('--failure');
+    this.ANOMALY_HIGHLIGHT_COLOR = style.getPropertyValue('--warning');
 
     // Now override with CSS variables if they are present.
     const onBackground = style.getPropertyValue('--on-backgroud');
@@ -1783,6 +1787,19 @@
         ctx.fillStyle = this.ANOMALY_BACKGROUND;
 
         ctx.fill(anomalyPath);
+
+        // If the anomaly is marked for highlighting, draw a circle around
+        // the icon with the highlight color.
+        if (anomalyData.highlight) {
+          const highlightPath = new Path2D();
+          const highlightRadius = this.ANOMALY_RADIUS + 2 * this.scale;
+          highlightPath.moveTo(cx + highlightRadius, cy);
+          highlightPath.arc(cx, cy, highlightRadius, 0, 2 * Math.PI);
+
+          ctx.fillStyle = this.ANOMALY_HIGHLIGHT_COLOR;
+          ctx.fill(highlightPath);
+        }
+
         let symbol = '';
         if (anomaly.is_improvement) {
           ctx.fillStyle = this.IMPROVEMENT_COLOR;
