diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts
index c6ab8ee5c7a1201f98485a6ffeb303bbbe784668..74edde16d07dd2b8b59af96c14976cb5f2630441 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/models/state.model.ts
@@ -4,7 +4,10 @@ import {
   GeophysicalUsage,
 } from '@ghsc/nshmp-utils-ts/libs/ncm/geophysical';
 
+import {Plots} from './plots.model';
+
 export interface AppState {
+  plots: Plots;
   serviceCallInfo: ServiceCallInfo;
   serviceResponse: GeophysicalResponse;
   usageResponse: GeophysicalUsage;
diff --git a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts
index ba6f7e14285126be4c4d50917f1948b57f1a5ac3..3941933afffe3b850bf3449a5b01196056a70815 100644
--- a/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts
+++ b/projects/nshmp-apps/src/app/ncm/geophysical-profiles/services/app.service.ts
@@ -5,6 +5,11 @@ import {
   ServiceCallInfo,
   SpinnerService,
 } from '@ghsc/nshmp-lib-ng/nshmp';
+import {
+  DefaultPlotOptions,
+  NshmpPlot,
+  plotUtils,
+} from '@ghsc/nshmp-lib-ng/plot';
 import {GeophysicalUsage} from '@ghsc/nshmp-utils-ts/libs/ncm/geophysical';
 import deepEqual from 'deep-equal';
 import {environment} from 'projects/nshmp-apps/src/environments/environment';
@@ -13,6 +18,7 @@ import {SharedService} from 'projects/nshmp-apps/src/shared/services/shared.serv
 import {catchError} from 'rxjs';
 
 import {ControlForm} from '../models/control-form.model';
+import {Plots} from '../models/plots.model';
 import {AppState} from '../models/state.model';
 
 /**
@@ -43,6 +49,13 @@ export class AppService
     this.addValidators();
   }
 
+  /**
+   * Returns the plots.
+   */
+  get plots(): Signal<Plots> {
+    return computed(() => this.state().plots);
+  }
+
   /**
    * Returns the service call info.
    */
@@ -87,6 +100,43 @@ export class AppService
     };
   }
 
+  defaultPlots(): Plots {
+    const xLabel = 'Depth (meters)';
+
+    return {
+      density: this.defaultPlot({
+        id: 'density',
+        title: 'Density Profile',
+        xLabel,
+        yLabel: 'Density Profile (kg/m3)',
+      }),
+      porosity: this.defaultPlot({
+        id: 'porosity',
+        title: 'Porosity Profile',
+        xLabel,
+        yLabel: 'Porosity Profile',
+      }),
+      temperature: this.defaultPlot({
+        id: 'temperature',
+        title: 'Temperature Profile',
+        xLabel,
+        yLabel: 'Temperature Profile (°C)',
+      }),
+      vp: this.defaultPlot({
+        id: 'p-wave',
+        title: 'P-wave Profile',
+        xLabel,
+        yLabel: 'P-wave Profile (m/s)',
+      }),
+      vs: this.defaultPlot({
+        id: 's-wave',
+        title: 'S-wave Profile',
+        xLabel,
+        yLabel: 'S-wave Profile (m/s)',
+      }),
+    };
+  }
+
   init(): void {
     const spinnerRef = this.spinnerService.show(
       SpinnerService.MESSAGE_METADATA
@@ -115,6 +165,7 @@ export class AppService
 
   initialState(): AppState {
     return {
+      plots: this.defaultPlots(),
       serviceCallInfo: {
         serviceCalls: [],
         serviceName: 'Geophysical profiles',
@@ -150,6 +201,19 @@ export class AppService
     }
   }
 
+  private defaultPlot(options: DefaultPlotOptions): NshmpPlot {
+    const plotData = plotUtils.defaultPlot(options);
+
+    return {
+      label: options.title,
+      plotData,
+      settingsForm: plotUtils.plotSettingsToFormGroup({
+        config: plotData.config,
+        layout: plotUtils.plotlyLayoutToSettings(plotData.layout),
+      }),
+    };
+  }
+
   private resetState(): void {
     this.updateState({
       serviceCallInfo: {