diff --git a/frontend/src/components/Doughnut.vue b/frontend/src/components/Doughnut.vue
index 5428cd74b64631538923e1098fb3276b0d19922c..a34b65228f9898d5cd61fa403a43d0cfa7bcbeb0 100644
--- a/frontend/src/components/Doughnut.vue
+++ b/frontend/src/components/Doughnut.vue
@@ -1,24 +1,26 @@
 <template>
   <v-card class="pa-2">
     <div class="card-body">
-      <div>
-        <canvas :id="chartId"></canvas>
-      </div>
-      <!-- <div class="text-xs-center" v-else>
+      <div class="text-xs-center" v-if="noGraph">
         <v-progress-circular
           indeterminate
           color="secondary"
         ></v-progress-circular>
-      </div> -->
+      </div>
+      <div>
+        <canvas :id="chartId"></canvas>
+      </div>
       <v-layout
-        align-center
-        wrap
+        justify-space-around
+        row
       >
-        <v-switch
-          v-model="displayLegend"
-          label="Display legend">
-        </v-switch>
-        <v-flex xs12 sm6>
+        <v-flex sm3>
+          <v-switch
+            v-model="hideLegend"
+            label="Hide legend">
+          </v-switch>
+        </v-flex>
+        <v-flex sm8>
           <v-select
             v-model="hideLabels"
             :items="this.labels"
@@ -26,6 +28,7 @@
             chips
             :label="hideLabelsLabel"
             multiple
+            clearable
           ></v-select>
         </v-flex>
       </v-layout>
@@ -42,23 +45,28 @@ export default {
       type: Object,
       required: true,
     },
+    chartId: String,
   },
   data() {
     return {
       myChart: {},
       options: {},
       colors: [],
-      chartId: "myChart",
-      displayLegend: true,
+      hideLegend: false,
       labels: [],
       hideLabels: [],
+      noGraph: true,
     }
   },
   watch: {
     doughnutData(val) {
+      if (this.noGraph) {
+        this.noGraph = false;
+        this.createChart();
+      }
       this.updateChart();
     },
-    displayLegend(val) {
+    hideLegend(val) {
       this.updateChartOptions();
     },
     hideLabels() {
@@ -73,21 +81,18 @@ export default {
         return "Hide " + this.doughnutData.level;
       }
     },
-  },
-  mounted() {
-    this.createChart(this.chartId);
+    displayLegend() {
+      return !this.hideLegend;
+    }
   },
   methods: {
-    createChart(chartId) {
-      const ctx = document.getElementById(chartId);
+    createChart() {
+      const ctx = document.getElementById(this.chartId);
       this.myChart = new Chart(ctx, {
-        data: this.data,
         type: 'doughnut',
-        options: this.options,
       });
     },
     updateChart() {
-      this.dataDict = this.doughnutData.data;
       this.labels = Object.keys(this.doughnutData.data);
       this.generateColorList();
       this.updateChartOptions();
@@ -117,7 +122,7 @@ export default {
       this.myChart.update();
     },
     updateChartData() {
-      const dataDict = Object.assign({}, this.dataDict);
+      const dataDict = Object.assign({}, this.doughnutData.data);
       for (let i=0; i < this.hideLabels.length; i++) {
         delete dataDict[this.hideLabels[i]];
       };
@@ -131,7 +136,7 @@ export default {
         ],
       };
       this.myChart.update();
-    }
+    },
   },
 };
 </script>
diff --git a/frontend/src/components/Histogram.vue b/frontend/src/components/Histogram.vue
index a5f412ece6f37c3b3ff6d48fb1307771306d379d..a367a4160d865dacd21d06ddf61095ead26c1a74 100644
--- a/frontend/src/components/Histogram.vue
+++ b/frontend/src/components/Histogram.vue
@@ -1,15 +1,15 @@
 <template>
   <v-card class="pa-2">
     <div class="card-body">
-      <div v-if="histoData.data">
-        <canvas :id="histoData.chart_id"></canvas>
-      </div>
-      <div class="text-xs-center" v-else>
+      <div class="text-xs-center" v-if="noGraph">
         <v-progress-circular
           indeterminate
           color="secondary"
         ></v-progress-circular>
       </div>
+      <div>
+        <canvas :id="chartId"></canvas>
+      </div>
     </div>
   </v-card>
 </template>
@@ -23,14 +23,36 @@ export default {
       type: Object,
       required: true,
     },
+    chartId: String,
   },
-  updated() {
-    this.createChart(this.histoData.chart_id);
+  data() {
+    return {
+      myChart: {},
+      options: {},
+      noGraph: true,
+    }
+  },
+  watch: {
+    histoData(val) {
+      if (this.noGraph) {
+        this.noGraph = false;
+        this.createChart();
+      }
+      this.updateChart();
+    },
   },
   methods: {
-    createChart(chartId) {
-      const ctx = document.getElementById(chartId);
-      const data = {
+    createChart() {
+      const ctx = document.getElementById(this.chartId);
+      this.myChart = new Chart(ctx, {
+        type: 'bar',
+      });
+    },
+    updateChart() {
+      this.updateChartData();
+    },
+    updateChartData() {
+      this.myChart.data = {
         labels: this.histoData.labels,
         datasets: [
           {
@@ -41,11 +63,7 @@ export default {
           },
         ],
       };
-      // eslint-disable-next-line
-      const myChart = new Chart(ctx, {
-        type: 'bar',
-        data: data,
-      });
+      this.myChart.update();
     },
   },
 };
diff --git a/frontend/src/views/Stats.vue b/frontend/src/views/Stats.vue
index e74d222c4f0687afdf12d642d5a8664e463904cc..ef4abe506f3dc605e7f8c9d91011eb2aa92dd52c 100644
--- a/frontend/src/views/Stats.vue
+++ b/frontend/src/views/Stats.vue
@@ -51,8 +51,9 @@
                   ></v-select>
                 </v-flex>
               </v-toolbar>
-              <histogram :histoData="geneLengthData"></histogram>
+              <histogram :histoData="geneLengthData" chartId="histo_gene_length"></histogram>
             </v-flex>
+            <!-- Doughnut -->
             <v-flex xs12 md6 xl4>
               <v-toolbar
                 class="secondary"
@@ -71,7 +72,7 @@
                   ></v-select>
                 </v-flex>
               </v-toolbar>
-              <doughnut :doughnutData="taxoCounts"></doughnut>
+              <doughnut :doughnutData="taxoCounts" chartId="taxo_annotation"></doughnut>
             </v-flex>
           </v-layout>
         </v-container>
@@ -135,7 +136,6 @@ export default {
       })
       .then((response) => {
         this.geneLengthData = {
-          chart_id: "histo_gene_length",
           data: response.data.results.counts,
           labels: response.data.results.labels,
           label: "Number of genes",