diff --git a/src/main/kotlin/Service/FlowDrawer.kt b/src/main/kotlin/Service/FlowDrawer.kt
index 94d2eb4a7b8f1b3ef4f0e3bc2eff96a34c3a2254..9e3f829bd34ffc5ad23f1308a8e21f490ba71b06 100644
--- a/src/main/kotlin/Service/FlowDrawer.kt
+++ b/src/main/kotlin/Service/FlowDrawer.kt
@@ -13,10 +13,12 @@ import kotlin.random.Random
 const val MAX_RADAR_SEGMENT = 143
 const val MIN_DATA_VALUE = -10.0
 const val MAX_DATA_VALUE = 50.0
+const val MAX_RADAR_DISTANCE = 60.0
 
 class FlowDrawer(private val title: String, private val flowData: Flow<ResponseData>,
-                 minDataValue: Double = MIN_DATA_VALUE, maxDataValue: Double = MAX_DATA_VALUE) {
-    private val radar = Radar(MAX_RADAR_SEGMENT, 0.0, 2 * PI, minDataValue, maxDataValue)
+                 minDataValue: Double = MIN_DATA_VALUE, maxDataValue: Double = MAX_DATA_VALUE,
+                 maxRadarDistance: Double = MAX_RADAR_DISTANCE) {
+    private val radar = Radar(MAX_RADAR_SEGMENT, 0.0, 2 * PI, minDataValue, maxDataValue, maxRadarDistance)
 
     fun draw(): Pair<Job, Job> {
         val window = Window(title, radar)
diff --git a/src/main/kotlin/drawing/Character.kt b/src/main/kotlin/drawing/Character.kt
index bf15a4d2932d4e552c95406f00284b0c8ef77890..6662c382a7e528170cdcfcfb3ebb4ee4ba7a0c07 100644
--- a/src/main/kotlin/drawing/Character.kt
+++ b/src/main/kotlin/drawing/Character.kt
@@ -15,20 +15,44 @@ import java.nio.file.Paths
 const val CHARACTER_TEXTURE = "textures/Numbermap.png"
 
 class Character {
-    fun renderCharacter(char: Char, x: Float, y: Float) {
+    fun renderText(string: String, x: Float = -0.9f, y: Float = -0.9f, scale : Float = 0.6f) {
+        val characterSize = Point(1/26.0, 0.1).scale(scale.toDouble())
+        for (i in string.indices) {
+            renderCharacter(string[i], x + i * characterSize.x.toFloat(), y, scale)
+        }
+    }
+    fun renderTextAlignRight(string: String, x: Float = -0.9f, y: Float = -0.9f, maxNumOfCharacters: Int, scale : Float = 0.6f) {
+        val characterSize = Point(1/26.0, 0.1).scale(scale.toDouble())
+        for (i in string.indices) {
+            renderCharacter(string[i], x + (i + maxNumOfCharacters - string.length) * characterSize.x.toFloat(), y, scale)
+        }
+    }
+    fun renderTextAlignCenter(string: String, x: Float = -0.9f, y: Float = -0.9f, maxNumOfCharacters: Int, scale : Float = 0.6f) {
+        val characterSize = Point(1/26.0, 0.1).scale(scale.toDouble())
+        for (i in string.indices) {
+            renderCharacter(string[i], x + (i + (maxNumOfCharacters - string.length)/2) * characterSize.x.toFloat(), y, scale)
+        }
+    }
+    private fun renderCharacter(char: Char, x: Float = -.9f, y: Float = 0f, scale: Float = 0.6f) {
+        val bottomLeftTextureCoordinate = Point(characterMap[char]!! / 13.0, 0.0)
+        val topRightTextureCoordinate = Point((characterMap[char]!! + 1) / 13.0, 1.0)
+        val characterSize = Point(1/26.0, 0.1).scale(scale.toDouble())
+
+        glEnable(GL_TEXTURE_2D)
         glBindTexture(GL_TEXTURE_2D, textureId)
 
         glColor3d(1.0, 1.0, 1.0)
         glBegin(GL_QUADS)
-        glTexCoord2f(0.0f, 1.0f)
-        glVertex3f(-0.9f, 0.0f, 0.0f)
-        glTexCoord2f(1.0f, 1.0f)
-        glVertex3f(-0.4f, 0.0f, 0.0f)
-        glTexCoord2f(1.0f, 0.0f)
-        glVertex3f(-0.4f, 0.1f, 0.0f)
-        glTexCoord2f(0.0f, 0.0f)
-        glVertex3f(-0.9f, 0.1f, 0.0f)
+        glTexCoord2d(bottomLeftTextureCoordinate.x, topRightTextureCoordinate.y)
+        glVertex3f(x, y, 0.0f)
+        glTexCoord2d(topRightTextureCoordinate.x, topRightTextureCoordinate.y)
+        glVertex3f(x + characterSize.x.toFloat(), y, 0.0f)
+        glTexCoord2d(topRightTextureCoordinate.x, bottomLeftTextureCoordinate.y)
+        glVertex3f(x + characterSize.x.toFloat(), y + characterSize.y.toFloat(), 0.0f)
+        glTexCoord2d(bottomLeftTextureCoordinate.x, bottomLeftTextureCoordinate.y)
+        glVertex3f(x, y + characterSize.y.toFloat(), 0.0f)
         glEnd()
+        glDisable(GL_TEXTURE_2D)
     }
 
     companion object {
@@ -52,6 +76,8 @@ class Character {
             '.' to 12,
         )
 
+        val mapLength: Int = characterMap.size
+
         init {
             // Load the image
             val imageBuffer = loadImageFromResources(CHARACTER_TEXTURE)
diff --git a/src/main/kotlin/drawing/Draw.kt b/src/main/kotlin/drawing/Draw.kt
index a5327b3b7d53560dec7339026c7605eeaab92e39..b3de8e3b7e899da46c40182128a3a1b88918578b 100644
--- a/src/main/kotlin/drawing/Draw.kt
+++ b/src/main/kotlin/drawing/Draw.kt
@@ -246,10 +246,50 @@ class Draw {
             glVertex2d(points[0].x, points[0].y)
             glEnd()
         }
+        private fun radarPlotVerticalAxesNumbers(radar: Radar, center: Point, windowWidth: Int, windowHeight: Int, size: Double, numOfScale: Int) {
+            val character = Character()
+            val scaleList = mutableListOf<String>()
+            for (i in 0 until numOfScale) {
+                scaleList.add("%d".format((-radar.maxDistance + i * (radar.maxDistance * 2 / (numOfScale - 1))).toInt()))
+            }
+            val maxCharacterLength: Int = scaleList.maxBy { it -> it.length.toInt() }.length
+            val widerDimension: Double = max(windowWidth, windowHeight).toDouble()
+            val fixedXRatio = windowHeight / widerDimension
+            val fixedYRatio = windowWidth / widerDimension
+            val minPoint = Point(-size / 2, -size / 2)
+                .scale(fixedXRatio, fixedYRatio)
+                .translate(center)
+                .translate(-0.1, -0.03)
+            val interval = Point(0.0, size * fixedYRatio / (numOfScale - 1))
+            for (i in scaleList.indices) {
+                character.renderTextAlignRight(scaleList[i], minPoint.x.toFloat(), (minPoint.y + i * interval.y).toFloat(), maxCharacterLength)
+            }
+        }
+        private fun radarPlotHorizontalAxesNumbers(radar: Radar, center: Point, windowWidth: Int, windowHeight: Int, size: Double, numOfScale: Int) {
+            val character = Character()
+            val scaleList = mutableListOf<String>()
+            for (i in 0 until numOfScale) {
+                scaleList.add("%d".format((-radar.maxDistance + i * (radar.maxDistance * 2 / (numOfScale - 1))).toInt()))
+            }
+            val maxCharacterLength: Int = scaleList.maxBy { it -> it.length.toInt() }.length
+            val widerDimension: Double = max(windowWidth, windowHeight).toDouble()
+            val fixedXRatio = windowHeight / widerDimension
+            val fixedYRatio = windowWidth / widerDimension
+            val minPoint = Point(-size / 2, -size / 2)
+                .scale(fixedXRatio, fixedYRatio)
+                .translate(center)
+                .translate(-0.04, -0.1)
+            val interval = Point(size * fixedXRatio / (numOfScale - 1), 0.0)
+            for (i in scaleList.indices) {
+                character.renderTextAlignCenter(scaleList[i], (minPoint.x + i * interval.x).toFloat(), minPoint.y.toFloat(), maxCharacterLength)
+            }
+        }
         fun radar(radar: Radar, windowWidth: Int, windowHeight: Int, center: Point = Point(-0.1, 0.0), size: Double = 1.5, numOfScale: Int = 5) {
             radarValues(radar, windowWidth, windowHeight, center, size)
             radarPlotSquare(center, windowWidth, windowHeight, size)
             radarPlotAxes(center, windowWidth, windowHeight, size, numOfScale)
+            radarPlotVerticalAxesNumbers(radar, center, windowWidth, windowHeight, size, numOfScale)
+            radarPlotHorizontalAxesNumbers(radar, center, windowWidth, windowHeight, size, numOfScale)
         }
         private fun radarScaleGradient(radarScale: RadarScale, center: Point, height: Double, width: Double) {
             val gradient: ColorInterpolation = radarScale.colorGradient
@@ -299,10 +339,23 @@ class Draw {
             }
             glEnd()
         }
+        private fun radarScaleNumbers(radarScale: RadarScale, center: Point, height: Double, width: Double) {
+            val character = Character()
+            val scaleList = mutableListOf<String>()
+            for (i in 0 until radarScale.numOfScale) {
+                scaleList.add("%.1f".format(radarScale.minimumValue + i * (radarScale.maximumValue - radarScale.minimumValue) / (radarScale.numOfScale - 1)))
+            }
+            val startingPoint = center.clone().translate(width / 2 + 0.03, -height / 2 - 0.04)
+            val interval = Point(0.0, height / (radarScale.numOfScale - 1))
+            for (i in scaleList.indices) {
+                character.renderText(scaleList[i], startingPoint.x.toFloat(), (startingPoint.y + i * interval.y).toFloat())
+            }
+        }
         fun radarScale(radarScale: RadarScale, center: Point = Point(0.7, 0.0), height: Double = 1.5, width: Double = 0.1) {
             radarScaleGradient(radarScale, center, height, width)
             radarScaleOuterSquare(center, height, width)
             radarScaleStripes(radarScale, center, height, width)
+            radarScaleNumbers(radarScale, center, height, width)
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/radar/Radar.kt b/src/main/kotlin/radar/Radar.kt
index 6f6b481c44f12e13112398340385e44a12fd3379..82f66c0235824707889d1a5ebdbc025fe8d5e5ac 100644
--- a/src/main/kotlin/radar/Radar.kt
+++ b/src/main/kotlin/radar/Radar.kt
@@ -25,6 +25,7 @@ class Radar (numSegments: Int) {
     private var minValue: Double = 0.0
     private var maxValue: Double = 20.0
     private var radarColors: ColorInterpolation = ColorInterpolation()
+    var maxDistance: Double = 60.0
     constructor(numSegments: Int, maxAngle: Double) : this(numSegments) {
         this.maxAngle = maxAngle
     }
@@ -41,9 +42,18 @@ class Radar (numSegments: Int) {
         this.minValue = minValue
         this.maxValue = maxValue
     }
+    constructor(numSegments: Int, minAngle: Double, maxAngle: Double, minValue: Double, maxValue: Double, maxDistance: Double) : this(numSegments, minAngle, maxAngle) {
+        this.minValue = minValue
+        this.maxValue = maxValue
+        this.maxDistance = maxDistance
+    }
     constructor(numSegments: Int, minAngle: Double, maxAngle: Double, minValue: Double, maxValue: Double, radarColors: ColorInterpolation) : this(numSegments, minAngle, maxAngle, minValue, maxValue) {
         this.radarColors = radarColors
     }
+    constructor(numSegments: Int, minAngle: Double, maxAngle: Double, minValue: Double, maxValue: Double, maxDistance: Double, radarColors: ColorInterpolation) : this(numSegments, minAngle, maxAngle, minValue, maxValue) {
+        this.radarColors = radarColors
+        this.maxDistance = maxDistance
+    }
 
     // Methods
     override fun toString() : String {
diff --git a/src/main/kotlin/radar/RadarScale.kt b/src/main/kotlin/radar/RadarScale.kt
index 29c3e39d011d9c79b9aea02dec3c09c72fe88a16..813ddddf232d97681143888dabfe09fd50752d68 100644
--- a/src/main/kotlin/radar/RadarScale.kt
+++ b/src/main/kotlin/radar/RadarScale.kt
@@ -9,4 +9,8 @@ class RadarScale(var minimumValue: Float, var maximumValue: Float, var numOfScal
         this.colorGradient = colorGradient
     }
     constructor() : this(0f, 20f, 5)
+    constructor(radar: Radar) : this(radar.getMinimumValue().toFloat(), radar.getMaximumValue().toFloat(), 5)
+    constructor(radar: Radar, numOfScale: Int) : this(radar) {
+        this.numOfScale = numOfScale
+    }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/window/Window.kt b/src/main/kotlin/window/Window.kt
index e135cb15611ea2d394f00a4219b39a1eb1567e63..be083623861ae4d2cd67a5585c5d836e09effeb1 100755
--- a/src/main/kotlin/window/Window.kt
+++ b/src/main/kotlin/window/Window.kt
@@ -23,7 +23,7 @@ import kotlin.random.Random
 
 class Window(private val windowTitle: String, private val radar: Radar) {
     private var window: Long = NULL;
-    private var radarScale = RadarScale()
+    private var radarScale = RadarScale(radar)
     private var windowWidth: Int = 800
     private var windowHeight: Int = 600
 
@@ -86,15 +86,9 @@ class Window(private val windowTitle: String, private val radar: Radar) {
         while(!glfwWindowShouldClose(window)){
             glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT)
 
-
-            glDisable(GL_TEXTURE_2D)
-
             Draw.radar(radar, windowWidth, windowHeight)
             Draw.radarScale(radarScale)
 
-            glEnable(GL_TEXTURE_2D)
-            character.renderCharacter('1', 0.0f ,0.0f)
-
             glfwSwapBuffers(window)
             glfwPollEvents()
         }