diff --git a/api/src/engine/models/result/common/chart-axis.model.ts b/api/src/engine/models/result/common/chart-axis.model.ts
index f5045887954c5399f107718ae539bfcc9ac7d739..16fc1f68a10e379b0bf4e45225c7912710d1d34d 100644
--- a/api/src/engine/models/result/common/chart-axis.model.ts
+++ b/api/src/engine/models/result/common/chart-axis.model.ts
@@ -6,5 +6,5 @@ export class ChartAxis {
   label?: string;
 
   @Field(() => [String], { nullable: true, defaultValue: [] })
-  categories: string[];
+  categories?: string[];
 }
diff --git a/api/src/engine/models/result/common/result-union.model.ts b/api/src/engine/models/result/common/result-union.model.ts
index 9957a6068e693c7c99cc9ffd59ebec2ddc61a635..2f56bb4d1f6ef577e9e836972f45dd59ede7fc28 100644
--- a/api/src/engine/models/result/common/result-union.model.ts
+++ b/api/src/engine/models/result/common/result-union.model.ts
@@ -1,11 +1,19 @@
 import { createUnionType } from '@nestjs/graphql';
 import { GroupsResult } from '../groups-result.model';
+import { HeatMapResult } from '../heat-map-result.model';
+import { LineChartResult } from '../line-chart-result.model';
 import { RawResult } from '../raw-result.model';
 import { TableResult } from '../table-result.model';
 
 export const ResultUnion = createUnionType({
   name: 'ResultUnion',
-  types: () => [TableResult, RawResult, GroupsResult],
+  types: () => [
+    TableResult,
+    RawResult,
+    GroupsResult,
+    HeatMapResult,
+    LineChartResult,
+  ],
   resolveType(value) {
     if (value.headers) {
       return TableResult;
@@ -19,6 +27,14 @@ export const ResultUnion = createUnionType({
       return GroupsResult;
     }
 
+    if (value.matrix) {
+      return HeatMapResult;
+    }
+
+    if (value.x) {
+      return LineChartResult;
+    }
+
     return null;
   },
 });
diff --git a/api/src/engine/models/result/heat-map-result.model.ts b/api/src/engine/models/result/heat-map-result.model.ts
index ab4d2d86ca410f8a65e61f971caff1384eb35b65..267dc3c20201236e5d11ee1cbcbb6d6d89af15a7 100644
--- a/api/src/engine/models/result/heat-map-result.model.ts
+++ b/api/src/engine/models/result/heat-map-result.model.ts
@@ -10,9 +10,9 @@ export class HeatMapResult extends Result {
   @Field(() => [[Number]])
   matrix: number[][];
 
-  @Field(() => [ChartAxis])
+  @Field(() => ChartAxis)
   xAxis: ChartAxis;
 
-  @Field(() => [ChartAxis])
+  @Field(() => ChartAxis)
   yAxis: ChartAxis;
 }
diff --git a/api/src/engine/models/result/line-chart-result.model.ts b/api/src/engine/models/result/line-chart-result.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..85ea4ff66e9780a1cb01de9ea68621b6486e9de5
--- /dev/null
+++ b/api/src/engine/models/result/line-chart-result.model.ts
@@ -0,0 +1,54 @@
+import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
+import { ChartAxis } from './common/chart-axis.model';
+import { Result } from './common/result.model';
+
+export enum LineType {
+  NORMAL,
+  DASHED,
+}
+
+registerEnumType(LineType, {
+  name: 'LineType',
+});
+
+@ObjectType()
+export class ExtraLineInfo {
+  @Field()
+  label: string;
+
+  @Field(() => [String])
+  values: string[];
+}
+
+@ObjectType()
+export class LineResult {
+  @Field()
+  label: string;
+
+  @Field(() => [Number])
+  x: number[];
+
+  @Field(() => [Number])
+  y: number[];
+
+  @Field(() => [ExtraLineInfo], { nullable: true, defaultValue: [] })
+  extraLineInfos?: ExtraLineInfo[];
+
+  @Field(() => LineType, { nullable: true, defaultValue: LineType.NORMAL })
+  type?: LineType;
+}
+
+@ObjectType()
+export class LineChartResult extends Result {
+  @Field()
+  name: string;
+
+  @Field(() => ChartAxis, { nullable: true })
+  xAxis?: ChartAxis;
+
+  @Field(() => ChartAxis, { nullable: true })
+  yAxis?: ChartAxis;
+
+  @Field(() => [LineResult])
+  lines: LineResult[];
+}
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 86b31a4d2dcb38a15ab00200462ce2c5bd220d97..b2c3ddb14a0cd1ade6d856616c0f56634915c969 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -63,7 +63,7 @@ type GroupResult {
   results: [ResultUnion!]!
 }
 
-union ResultUnion = TableResult | RawResult | GroupsResult
+union ResultUnion = TableResult | RawResult | GroupsResult | HeatMapResult | LineChartResult
 
 type TableResult {
   name: String!
@@ -84,6 +84,43 @@ type GroupsResult {
   groups: [GroupResult!]!
 }
 
+type HeatMapResult {
+  name: String!
+  matrix: [[Float!]!]!
+  xAxis: ChartAxis!
+  yAxis: ChartAxis!
+}
+
+type LineChartResult {
+  name: String!
+  xAxis: ChartAxis
+  yAxis: ChartAxis
+  lines: [LineResult!]!
+}
+
+type ChartAxis {
+  label: String
+  categories: [String!]
+}
+
+type ExtraLineInfo {
+  label: String!
+  values: [String!]!
+}
+
+type LineResult {
+  label: String!
+  x: [Float!]!
+  y: [Float!]!
+  extraLineInfos: [ExtraLineInfo!]
+  type: LineType
+}
+
+enum LineType {
+  NORMAL
+  DASHED
+}
+
 type Header {
   name: String!
   type: String!