diff --git a/res/stages/data-view-stage.fxml b/res/stages/data-view-stage.fxml
index 4eaff3a517f37cf2129ee0f95c841f2182c4ff82..7adaf2e98d4a5a148fa0e36cdce53bb08f9e63ca 100644
--- a/res/stages/data-view-stage.fxml
+++ b/res/stages/data-view-stage.fxml
@@ -6,37 +6,55 @@
 <?import javafx.scene.control.*?>
 <?import javafx.scene.image.*?>
 <?import javafx.scene.layout.*?>
+<?import javafx.scene.text.*?>
 <?import javafx.stage.*?>
 
-<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.MainStageController">
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.DataStageController">
     <scene>
         <Scene>
-            <AnchorPane prefHeight="363.0" prefWidth="692.0">
+            <AnchorPane prefHeight="487.0" prefWidth="692.0">
             <children>
-               <VBox prefHeight="363.0" prefWidth="691.0">
+               <VBox prefHeight="488.0" prefWidth="691.0">
                   <children>
-                     <HBox prefHeight="356.0" prefWidth="691.0">
+                     <HBox alignment="TOP_CENTER" prefHeight="356.0" prefWidth="691.0" spacing="5.0">
                         <children>
-                           <Region prefHeight="338.0" prefWidth="65.0" />
-                           <ScatterChart prefHeight="342.0" prefWidth="609.0">
-                             <xAxis>
-                               <CategoryAxis fx:id="absAxeView" prefHeight="21.0" prefWidth="498.0" side="BOTTOM" />
-                             </xAxis>
-                             <yAxis>
-                               <NumberAxis fx:id="ordAxeView" side="LEFT" />
-                             </yAxis>
-                           </ScatterChart>
-                           <Button fx:id="settingsView" mnemonicParsing="false">
-                              <graphic>
-                                 <ImageView fitHeight="100.0" fitWidth="30.0" pickOnBounds="true" preserveRatio="true">
-                                    <image>
-                                       <Image url="@gear.png" />
-                                    </image></ImageView>
-                              </graphic>
+                           <AnchorPane prefHeight="200.0" prefWidth="200.0">
+                              <children>
+                                 <Region prefHeight="338.0" prefWidth="65.0" />
+                                 <ScatterChart fx:id="scatterChart" prefHeight="342.0" prefWidth="609.0">
+                                   <xAxis>
+                                     <NumberAxis fx:id="absAxe" prefHeight="21.0" prefWidth="498.0" side="BOTTOM" />
+                                   </xAxis>
+                                   <yAxis>
+                                     <NumberAxis fx:id="ordAxe" side="LEFT" />
+                                   </yAxis>
+                                 </ScatterChart>
+                                 <Label fx:id="AxesSelected" alignment="CENTER" layoutX="175.0" layoutY="152.0" prefHeight="38.0" prefWidth="259.0">
+                                    <font>
+                                       <Font size="21.0" />
+                                    </font></Label>
+                              </children>
                               <HBox.margin>
-                                 <Insets right="10.0" top="30.0" />
+                                 <Insets left="10.0" />
                               </HBox.margin>
-                           </Button>
+                           </AnchorPane>
+                            <Button fx:id="settingsView" mnemonicParsing="false" onAction="#openAxesSetting">
+                                <graphic>
+                                    <ImageView fitHeight="100.0" fitWidth="30.0" pickOnBounds="true" preserveRatio="true">
+                                        <image>
+                                            <Image url="@gear.png" />
+                                        </image>
+                                 </ImageView>
+                                </graphic>
+                              <HBox.margin>
+                                 <Insets top="40.0" />
+                              </HBox.margin>
+                            </Button>
+                        </children>
+                     </HBox>
+                     <HBox alignment="CENTER" prefHeight="169.0" prefWidth="691.0" spacing="50.0">
+                        <children>
+                           <Button fx:id="classifyData" disable="true" mnemonicParsing="false" onAction="#classifyDatas" prefHeight="26.0" prefWidth="157.0" text="Classifier les données" />
                         </children>
                      </HBox>
                   </children>
diff --git a/res/stages/main-stage.fxml b/res/stages/main-stage.fxml
index 21c1941b9e1627e260b3f2c5f765e0bc59535401..d96791c6fc56edec5a2bb01d5b71bdb294fcdaa2 100644
--- a/res/stages/main-stage.fxml
+++ b/res/stages/main-stage.fxml
@@ -9,7 +9,7 @@
 <?import javafx.scene.text.*?>
 <?import javafx.stage.*?>
 
-<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.12" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.MainStageController">
+<Stage fx:id="stage" xmlns="http://javafx.com/javafx/17.0.2-ea" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.univlille.sae.classification.controller.MainStageController">
     <scene>
         <Scene>
             <AnchorPane prefHeight="487.0" prefWidth="692.0">
@@ -52,13 +52,18 @@
                             </Button>
                         </children>
                      </HBox>
-                     <HBox alignment="CENTER" prefHeight="169.0" prefWidth="691.0" spacing="50.0">
+                     <VBox alignment="TOP_CENTER" prefHeight="200.0" prefWidth="100.0">
                         <children>
-                           <Button fx:id="loadData" mnemonicParsing="false" onAction="#openLoadData" prefHeight="27.0" prefWidth="185.0" text="Charger un jeu de données" />
-                           <Button fx:id="addData" mnemonicParsing="false" onAction="#openAddData" prefHeight="26.0" prefWidth="141.0" text="Ajouter une donnée" />
-                           <Button fx:id="classifyData" disable="true" mnemonicParsing="false"  onAction="#classifyDatas" prefHeight="26.0" prefWidth="157.0" text="Classifier les données" />
+                           <HBox alignment="CENTER" prefHeight="85.0" prefWidth="691.0" spacing="50.0">
+                              <children>
+                                 <Button fx:id="loadData" mnemonicParsing="false" onAction="#openLoadData" prefHeight="27.0" prefWidth="185.0" text="Charger un jeu de données" />
+                                 <Button fx:id="addData" mnemonicParsing="false" onAction="#openAddData" prefHeight="26.0" prefWidth="141.0" text="Ajouter une donnée" />
+                                 <Button fx:id="classifyData" disable="true" mnemonicParsing="false" onAction="#classifyDatas" prefHeight="26.0" prefWidth="157.0" text="Classifier les données" />
+                              </children>
+                           </HBox>
+                           <Button alignment="CENTER" contentDisplay="CENTER" mnemonicParsing="false" onAction="#openDataView" text="Ouvrir une autre vue" />
                         </children>
-                     </HBox>
+                     </VBox>
                   </children>
                </VBox>
             </children></AnchorPane>
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
index 370a3a2fb7effe974b6f2500759a3b74980e7fb9..1a690a0d60ea419913197b982e16a872a530bae8 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AddDataController.java
@@ -2,6 +2,7 @@ package fr.univlille.sae.classification.controller;
 
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.Iris;
+import fr.univlille.sae.classification.view.DataVisualizationView;
 import fr.univlille.sae.classification.view.MainStageView;
 import javafx.fxml.FXML;
 import javafx.scene.control.*;
diff --git a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
index 8c890f287f75bcf97175c66402b68f004278a50e..16c52b1329fb9fd7842620cba9c2f817ef54300e 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/AxesSettingsController.java
@@ -1,7 +1,7 @@
 package fr.univlille.sae.classification.controller;
 
 import fr.univlille.sae.classification.model.ClassificationModel;
-import fr.univlille.sae.classification.view.MainStageView;
+import fr.univlille.sae.classification.view.DataVisualizationView;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
 import javafx.scene.control.ChoiceBox;
@@ -21,31 +21,31 @@ public class AxesSettingsController{
     @FXML
     Button confirmAxes;
 
-    MainStageView mainStageView;
+    DataVisualizationView dataVisualizationView;
 
     public void setSelectOrd(String[] fields){
         selectOrd.getItems().clear();
         selectOrd.getItems().addAll(fields);
-        selectOrd.setValue(mainStageView.getActualY());
+        selectOrd.setValue(dataVisualizationView.getActualY());
     }
 
     public void setSelectAbs(String[] fields){
         selectAbs.getItems().clear();
         selectAbs.getItems().addAll(fields);
-        selectAbs.setValue(mainStageView.getActualX());
+        selectAbs.setValue(dataVisualizationView.getActualX());
     }
 
-    public void setMainStageView(MainStageView mainStageView) {
-        this.mainStageView = mainStageView;
+    public void setdataVisualizationView(DataVisualizationView dataVisualizationView) {
+        this.dataVisualizationView = dataVisualizationView;
     }
 
     public void validate(){
-        mainStageView.setActualX(selectAbs.getValue().toString());
-        mainStageView.setActualY(selectOrd.getValue().toString());
-        mainStageView.getController().getScatterChart().getXAxis().setLabel(mainStageView.getActualX());
-        mainStageView.getController().getScatterChart().getYAxis().setLabel(mainStageView.getActualY());
+        dataVisualizationView.setActualX(selectAbs.getValue().toString());
+        dataVisualizationView.setActualY(selectOrd.getValue().toString());
+        dataVisualizationView.getScatterChart().getXAxis().setLabel(dataVisualizationView.getActualX());
+        dataVisualizationView.getScatterChart().getYAxis().setLabel(dataVisualizationView.getActualY());
 
-        mainStageView.update(ClassificationModel.getClassificationModel());
+        dataVisualizationView.reload();
         stage.close();
     }
 }
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
new file mode 100644
index 0000000000000000000000000000000000000000..2c561a9baeefbb69af581d0a69a7654c44783130
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/controller/DataStageController.java
@@ -0,0 +1,78 @@
+package fr.univlille.sae.classification.controller;
+
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.view.*;
+import javafx.fxml.FXML;
+import javafx.scene.chart.NumberAxis;
+import javafx.scene.chart.ScatterChart;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+
+
+public class DataStageController {
+    @FXML
+    Stage stage;
+
+    @FXML
+    NumberAxis absAxe;
+
+    @FXML
+    NumberAxis ordAxe;
+
+    @FXML
+    Button settings;
+
+    @FXML
+    Button loadData;
+
+    @FXML
+    Button classifyData;
+
+    @FXML
+    ScatterChart scatterChart;
+
+    @FXML
+    Label AxesSelected;
+
+    Stage loadStage;
+    private DataStageView dataStageView;
+
+    /**
+     * Ouvre l'interface de chargement des données.
+     * @throws IOException
+     */
+    public void openLoadData() throws IOException {
+        LoadDataView loadDataView = new LoadDataView(ClassificationModel.getClassificationModel(), stage);
+        loadDataView.show();
+    }
+
+    public void openAxesSetting()throws IOException {
+        AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, dataStageView);
+        axesSettingsView.show();
+    }
+
+    public void setDataStageView (DataStageView dataStageView) {
+        this.dataStageView = dataStageView;
+    }
+
+    public void classifyDatas() {
+        ClassificationModel.getClassificationModel().classifierDonnees();
+        classifyData.setDisable(true);
+    }
+
+
+    public ScatterChart getScatterChart() {
+        return this.scatterChart;
+    }
+
+    public void setAxesSelected(String texte) {
+        this.AxesSelected.setText(texte);
+    }
+
+    public Button getClassifyData() {
+        return this.classifyData;
+    }
+}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/DataViewStage.java b/src/main/java/fr/univlille/sae/classification/controller/DataViewStage.java
deleted file mode 100644
index fe7a9b0083d0ef2abc3ac4a22eb5be0faae92c5c..0000000000000000000000000000000000000000
--- a/src/main/java/fr/univlille/sae/classification/controller/DataViewStage.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package fr.univlille.sae.classification.controller;
-
-import javafx.fxml.FXML;
-import javafx.scene.chart.CategoryAxis;
-import javafx.scene.chart.NumberAxis;
-import javafx.scene.control.Button;
-import javafx.stage.Stage;
-
-public class DataViewStage {
-
-    @FXML
-    Stage stage;
-
-    @FXML
-    CategoryAxis absAxe;
-
-    @FXML
-    NumberAxis ordAxe;
-
-    @FXML
-    Button settings;
-}
diff --git a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
index bf9f71772b2d4d293772505e2f4e0b38e2b9f693..bf8ab81524503f95f0e79d146a92a2da1545ab7d 100644
--- a/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
+++ b/src/main/java/fr/univlille/sae/classification/controller/MainStageController.java
@@ -1,10 +1,7 @@
 package fr.univlille.sae.classification.controller;
 
 import fr.univlille.sae.classification.model.ClassificationModel;
-import fr.univlille.sae.classification.view.AxesSettingsView;
-import fr.univlille.sae.classification.view.LoadDataView;
-import fr.univlille.sae.classification.view.AddDataView;
-import fr.univlille.sae.classification.view.MainStageView;
+import fr.univlille.sae.classification.view.*;
 import javafx.fxml.FXML;
 
 import javafx.scene.chart.*;
@@ -59,6 +56,11 @@ public class MainStageController {
         loadDataView.show();
     }
 
+    public void openDataView() throws IOException {
+        DataStageView dataStageView = new DataStageView(ClassificationModel.getClassificationModel());
+        dataStageView.show();
+    }
+
     public void openAxesSetting()throws IOException {
         AxesSettingsView axesSettingsView = new AxesSettingsView(ClassificationModel.getClassificationModel(), stage, mainStageView);
         axesSettingsView.show();
diff --git a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
index f52b777a7d536b07d41032a0b6412eed913807fa..8b404aa681e721888ea94b8df97fa13ab727f9b6 100644
--- a/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/AddDataView.java
@@ -24,8 +24,6 @@ public class AddDataView {
         this.mainStageView = mainStageView;
     }
 
-
-
     public void show() throws IOException {
 
         FXMLLoader loader = new FXMLLoader();
diff --git a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
index 48ca4ce0f1b8e3369cc350672cb210b2a0bb39e2..2a1f23424e2d78a964eaae7a13df1d7b1f23802f 100644
--- a/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/AxesSettingsView.java
@@ -1,6 +1,7 @@
 package fr.univlille.sae.classification.view;
 
 import fr.univlille.sae.classification.controller.AxesSettingsController;
+import fr.univlille.sae.classification.controller.DataStageController;
 import fr.univlille.sae.classification.controller.MainStageController;
 import fr.univlille.sae.classification.model.ClassificationModel;
 import fr.univlille.sae.classification.model.LoadableData;
@@ -9,6 +10,7 @@ import javafx.scene.control.Alert;
 import javafx.stage.Modality;
 import javafx.stage.Stage;
 
+import javax.xml.crypto.Data;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
@@ -18,12 +20,12 @@ public class AxesSettingsView {
 
     private ClassificationModel model;
     private Stage owner;
-    private MainStageView mainStageView;
+    private DataVisualizationView dataVisualizationView;
 
-    public AxesSettingsView(ClassificationModel model, Stage owner, MainStageView mainStageView){
+    public AxesSettingsView(ClassificationModel model, Stage owner, DataVisualizationView dataVisualizationView){
         this.model = model;
         this.owner = owner;
-        this.mainStageView = mainStageView;
+        this.dataVisualizationView = dataVisualizationView;
     }
 
     public void show() throws IOException {
@@ -44,7 +46,7 @@ public class AxesSettingsView {
         root.setTitle("Configuration des axes");
         AxesSettingsController controller = loader.getController();
 
-        controller.setMainStageView(mainStageView);
+        controller.setdataVisualizationView(dataVisualizationView);
 
         if(model.getDatas().isEmpty()) {
             Alert alert = new Alert(Alert.AlertType.WARNING);
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataStageView.java b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
new file mode 100644
index 0000000000000000000000000000000000000000..2cf2f84225f9101e4a4a766392047b18c07b11a4
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/view/DataStageView.java
@@ -0,0 +1,149 @@
+package fr.univlille.sae.classification.view;
+
+import fr.univlille.sae.classification.controller.DataStageController;
+import fr.univlille.sae.classification.controller.MainStageController;
+import fr.univlille.sae.classification.model.ClassificationModel;
+import fr.univlille.sae.classification.model.DataType;
+import fr.univlille.sae.classification.model.Iris;
+import fr.univlille.sae.classification.model.LoadableData;
+import fr.univlille.sae.classification.utils.Observable;
+import fr.univlille.sae.classification.utils.Observer;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.chart.ScatterChart;
+import javafx.scene.chart.XYChart;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.MenuItem;
+import javafx.scene.shape.Circle;
+import javafx.stage.Stage;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+public class DataStageView extends DataVisualizationView implements Observer {
+
+    private ClassificationModel model;
+    private DataStageController controller;
+
+    private Stage root;
+
+    public DataStageView(ClassificationModel model) {
+        this.model = model;
+        model.attach(this);
+    }
+
+    public void show() throws IOException {
+        FXMLLoader loader = new FXMLLoader();
+
+        URL fxmlFileUrl = new File(System.getProperty("user.dir") + File.separator + "res" + File.separator + "stages" + File.separator + "data-view-stage.fxml").toURI().toURL();
+
+        if (fxmlFileUrl == null) {
+            System.out.println("Impossible de charger le fichier fxml");
+            System.exit(-1);
+        }
+        loader.setLocation(fxmlFileUrl);
+        root = loader.load();
+        root.setResizable(false);
+        root.setTitle("SAE3.3 - Logiciel de classification");
+        root.show();
+        loader.getController();
+        controller = loader.getController();
+        controller.setDataStageView(this);
+        scatterChart = controller.getScatterChart();
+        controller.setAxesSelected("Aucun fichier sélectionné");
+
+        if (!model.getDatas().isEmpty()) {
+            update(model);
+        }
+    }
+
+    @Override
+    public void update(Observable observable) {
+        if(scatterChart == null) throw new IllegalStateException();
+        if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
+        //on vide le nuage pour s'assurer que celui-ci est bien vide
+        scatterChart.getData().clear();
+
+        XYChart.Series series1 = new XYChart.Series();
+        series1.setName("Iris");
+
+        //Jalon 1: on verifie que le type de donnée est bien IRIS
+        if(model.getType() == DataType.IRIS) {
+            if(actualX==null && actualY==null){
+                controller.setAxesSelected("Aucuns axes sélectionnés");
+            }
+            else{
+                controller.setAxesSelected("");
+                // On ajoute la serie au nuage
+                scatterChart.getData().add(series1);
+
+                //On recupere les données du model
+                List<LoadableData> points = new ArrayList<>(model.getDatas());
+                points.addAll(model.getDataToClass());
+                // on ajoute chaque point a la serie
+                for(LoadableData i : points) {
+
+                    Iris iris = (Iris)i;
+                    XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(iris.getDataType(actualX),
+                            iris.getDataType(actualY));
+
+                    dataPoint.setNode(getCircle(iris));
+
+                    series1.getData().add(dataPoint);
+
+                }
+            }
+        }
+    }
+
+
+    private Circle getCircle(Iris iris) {
+        Circle circle = new Circle(5);
+        circle.setFill(iris.getColor());
+        circle.setOnMouseClicked(e -> {
+            ContextMenu contextMenu = new ContextMenu();
+            for(String attributes : iris.getAttributesName()) {
+                contextMenu.getItems().add(new MenuItem(attributes + " : " + iris.getDataType(attributes)));
+            }
+            contextMenu.show(root, e.getScreenX(), e.getScreenY());
+        });
+
+        return  circle;
+    }
+
+
+
+    @Override
+    public void update(Observable observable, Object data) {
+        if(scatterChart == null) throw new IllegalStateException();
+        if(!(observable instanceof ClassificationModel)) throw new IllegalStateException();
+        if(data instanceof Iris) {
+            Iris iris = (Iris) data;
+            if(actualX == null || actualY == null) {
+                controller.setAxesSelected("Aucuns axes sélectionnés");
+                return;
+            }
+            XYChart.Data<Double, Double> dataPoint = new XYChart.Data<>(
+                    iris.getDataType(actualX),
+                    iris.getDataType(actualY)
+            );
+
+            dataPoint.setNode(getCircle(iris));
+            if (!scatterChart.getData().isEmpty()) {
+                XYChart.Series series = (XYChart.Series) scatterChart.getData().get(0);
+                series.getData().add(dataPoint);
+            }
+        }
+    }
+
+    public DataStageController getController() {
+        return controller;
+    }
+
+    @Override
+    public void reload() {
+        this.update(ClassificationModel.getClassificationModel());
+    }
+}
diff --git a/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java b/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
new file mode 100644
index 0000000000000000000000000000000000000000..fd6757379be8e74f0903511c25872f56b27db1cd
--- /dev/null
+++ b/src/main/java/fr/univlille/sae/classification/view/DataVisualizationView.java
@@ -0,0 +1,32 @@
+package fr.univlille.sae.classification.view;
+
+import javafx.scene.chart.ScatterChart;
+
+public abstract class DataVisualizationView {
+    protected DataVisualizationView() {}
+    protected String actualX;
+    protected String actualY;
+    protected ScatterChart scatterChart;
+
+    public String getActualX() {
+        return actualX;
+    }
+
+    public void setActualX(String actualX) {
+        this.actualX = actualX;
+    }
+
+    public String getActualY() {
+        return actualY;
+    }
+
+    public void setActualY(String actualY) {
+        this.actualY = actualY;
+    }
+
+    public ScatterChart getScatterChart() {
+        return this.scatterChart;
+    }
+
+    public abstract void reload();
+}
diff --git a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
index 0e686afa50d61da39f744ad1b7c3430af59b4cd9..b3f14c497f862bded3509942b18a1d807be9ba20 100644
--- a/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
+++ b/src/main/java/fr/univlille/sae/classification/view/MainStageView.java
@@ -26,14 +26,11 @@ import java.io.IOException;
 import java.net.URL;
 import java.util.*;
 
-public class MainStageView implements Observer {
+public class MainStageView extends DataVisualizationView implements Observer {
 
     private ClassificationModel model;
-    private ScatterChart scatterChart;
     private MainStageController controller;
 
-    private String actualX;
-    private String actualY;
     private Stage root;
 
     public MainStageView(ClassificationModel model) {
@@ -154,24 +151,12 @@ public class MainStageView implements Observer {
         }
     }
 
-    public void setActualX(String actualX) {
-        this.actualX = actualX;
-    }
-
-    public void setActualY(String actualY) {
-        this.actualY = actualY;
-    }
-
-    public String getActualX() {
-        return actualX;
-    }
-
-    public String getActualY() {
-        return actualY;
-    }
-
     public MainStageController getController() {
         return controller;
     }
 
+    @Override
+    public void reload() {
+        this.update(ClassificationModel.getClassificationModel());
+    }
 }
diff --git a/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java b/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2b826541a9498a452c76769abc18f666bc30365d
--- /dev/null
+++ b/src/test/java/fr/univlille/sae/classification/model/ClassificationModelTest.java
@@ -0,0 +1,80 @@
+package fr.univlille.sae.classification.model;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class ClassificationModelTest {
+
+    private ClassificationModel model;
+
+    @BeforeEach
+    void setUp() {
+        model = ClassificationModel.getClassificationModel();
+    }
+
+    @Test
+    void testSingletonInstance() {
+        ClassificationModel anotherModel = ClassificationModel.getClassificationModel();
+        assertSame(model, anotherModel);
+    }
+
+    @Test
+    void testAjouterDonnee() {
+        double[] coords = {5.1, 3.5, 1.4, 0.2};
+        model.ajouterDonnee(coords);
+        
+        List<LoadableData> dataToClass = model.getDataToClass();
+        assertEquals(1, dataToClass.size());
+        assertNotNull(dataToClass.get(0).getClassification());
+    }
+
+    @Test
+    void testAjouterDonneeInsuffisante() {
+        Exception exception = assertThrows(IllegalArgumentException.class, () -> {
+            model.ajouterDonnee(5.1);
+        });
+        assertEquals(null, exception.getMessage());
+    }
+
+    @Test
+    void testLoadData() throws IOException {
+        File csvTemp = File.createTempFile("test", ".csv");
+        String csvTest = "sepal_length,sepal_width,petal_length,petal_width,class\n" +
+                         "5.1,3.5,1.4,0.2,Iris-setosa\n" +
+                         "4.9,3.0,1.4,0.2,Iris-setosa\n";
+        Files.write(Paths.get(csvTemp.getAbsolutePath()), csvTest.getBytes());
+
+        model.loadData(csvTemp);
+
+        List<LoadableData> datas = model.getDatas();
+        assertEquals(2, datas.size());
+        
+        csvTemp.delete();
+    }
+
+    @Test
+    void testClassifierDonnees() {
+        double[] coords1 = {5.1, 3.5, 1.4, 0.2};
+        double[] coords2 = {4.9, 3.0, 1.4, 0.2};
+        model.ajouterDonnee(coords1);
+        model.ajouterDonnee(coords2);
+        
+        model.classifierDonnees();
+
+        assertEquals(0, model.getDataToClass().size());
+    }
+
+    @Test
+    void testSetType() {
+        model.setType(DataType.IRIS);
+        assertEquals(DataType.IRIS, model.getType());
+    }
+}
diff --git a/src/test/java/fr/univlille/sae/classification/model/IrisTest.java b/src/test/java/fr/univlille/sae/classification/model/IrisTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0873a5f3a78475d65d874d2e7d40ab6788a9f0a
--- /dev/null
+++ b/src/test/java/fr/univlille/sae/classification/model/IrisTest.java
@@ -0,0 +1,50 @@
+package fr.univlille.sae.classification.model;
+import javafx.scene.paint.Color;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class IrisTest {
+
+    Iris iris = new Iris(2.8, 3.0, 1.9, 4.1, "Setosa");
+
+    @Test
+    void getSepalWidth() {
+        assertEquals(3.0 , iris.getSepalWidth());
+    }
+
+    @Test
+    void getSepalLength() {
+        assertEquals(2.8, iris.getSepalLength());
+    }
+
+    @Test
+    void getPetalWidth() {
+        assertEquals(4.1, iris.getPetalWidth());
+    }
+
+    @Test
+    void getPetalLength() {
+        assertEquals(1.9, iris.getPetalLength());
+    }
+
+
+    @Test
+    void getDataType() {
+        assertEquals(3.0 , iris.getDataType("sepalWidth"));
+        assertEquals(2.8, iris.getDataType("sepalLength"));
+        assertEquals(4.1, iris.getDataType("petalWidth"));
+        assertEquals(1.9, iris.getDataType("petalLength"));
+    }
+
+    @Test
+    void getColor() {
+        assertEquals(Color.RED, iris.getColor());
+    }
+
+    @Test
+    void testToString() {
+        assertEquals("Iris{sepalLength=2.8, sepalWidth=3.0, petalLength=1.9, petalWidth=4.1}", iris.toString());
+    }
+}
\ No newline at end of file