[Ruby on Rails] Créez un graphique circulaire des totaux par colonne avec Chartkick

introduction

J'ai utilisé Chart Kick parce que je voulais insérer un graphique avec des rails. Comme l'introduction elle-même est facile, nous décrirons comment créer un graphique circulaire des résultats agrégés.

Page référencée

environnement

ruby 2.5.1 Rails 5.2.4.3

Hypothèses et objectifs

Créez un graphique circulaire à partir de la ** colonne d'opinion (entier) ** du ** tableau des votes ** qui résume les opinions de l'utilisateur. Si la valeur de la colonne d'opinion est 1, c'est pour, et si elle est 0, c'est le contraire, mais elle est créée avec d'autres valeurs et valeurs NULL mélangées.

** table des votes **

id opinion
1 1
2 1
3 0
4 1
5 0
6 2
7 NULL
8 3
9 NULL
10 0

** Dessin d'achèvement **

pie_A.png

Introduction de Chart kick

Bien qu'il soit décrit sur la page de référence, il sera à nouveau décrit.

Gemfile


gem "chartkick"   #Ajouter

Gemfile


$ bundle install

app/javascript/packs/application.js


//= require chartkick
//= require Chart.bundle  #Ajouter deux lignes

Réflexion sur la page d'affichage

La page à afficher peut être n'importe où, mais cette fois, je voudrais afficher le graphique dans index.html.erb du contrôleur de messages.

html.erb:app/views/posts/index.html.erb


<%= pie_chart Vote.group(:opinion).count%>

chart (1).png

C'est un graphique que vous ne comprenez pas vraiment ce qu'il représente. ..

Par conséquent, définissez des variables et des méthodes pour les graphiques dans le fichier du contrôleur.

app/controllers/posts_controller.rb


  def index
    @opinion = Vote.pluck(:opinion)
    @aggregate = aggregateOpinion(@opinion)
    @sum = sumOpinion(@opinion)
  end

  def aggregateOpinion(array)
    result = [["Se mettre d'accord",0],["Opposition",0],["Ni",0],["Pas de réponse",0]]
    array.each do |i|
      if i == 1
        result[0][1] += 1
      elsif i == 0
        result[1][1] += 1
      elsif i == nil
        result[3][1] += 1
      else 
        result[2][1] += 1
      end
    end
    return result
  end

  def sumOpinion(array)
    result = [["Nombre total de votes",0],["Nombre de votes valides",0],["Nombre de votes invalides",0]]
    array.each do |i|
      if i == nil
        result[2][1] += 1
      else 
        result[1][1] += 1
      end
    end
    result[0][1] = array.length 
    return result
  end

Commentaire

Seule la colonne cible est acquise sous forme de tableau avec la méthode pluck. Après cela, il est formaté en données pour un graphique circulaire par la méthode aggregateOpinion.

Comme l'index du tableau de résultats est dans l'ordre d'affichage du graphe circulaire tel qu'il est, le paramètre est La valeur NULL vient en dernier, suivie du soi-disant "autre" (dans ce cas, le nom [ni]).

La méthode sumOpinion n'est pas directement liée au graphique, mais il est difficile de mettre les informations sur le nombre total de votes sur le graphique, il est donc créé séparément.

Sur la base du contenu ci-dessus, je voudrais le refléter à nouveau sur la page d'affichage.

html.erb:app/views/posts/index.html.erb


<%= pie_chart @aggregate, width: "500px"%>

chart (2).png

Ce n'est pas un problème, mais à la fin, la mise en page et le contenu acquis par la méthode sumOpinion sont affichés dans l'élément de table, et c'est terminé.

html.erb:app/views/posts/index.html.erb


<%= pie_chart @aggregate,colors: ["#3333cc","#cc3333","#339966","333"], donut: true , width: "500px"%>
<table border="1" width="500">
  <tr>
    <th>Nombre total de votes</th>
    <th>Nombre de votes valides</th>
    <th>Nombre de votes invalides</th>
  </tr>
    <tr>
    <th><%=@sum[0][1]%></th>
    <th><%=@sum[1][1]%></th>
    <th><%=@sum[2][1]%></th>
  </tr>
</table> 

pie_A.png

À la fin

Qu'as-tu pensé. Je pense que j'ai pu l'appliquer un peu plus à la partie méthode. .. Bien sûr, chartkick ne prend pas uniquement en charge les graphiques circulaires, veuillez donc le vérifier. Merci d'avoir regardé!

Recommended Posts

[Ruby on Rails] Créez un graphique circulaire des totaux par colonne avec Chartkick
[Ruby on Rails] Ajouter une colonne avec des contraintes de clé externe
[Rails] Procédure de liaison de bases de données avec Ruby On Rails
J'ai fait un portfolio avec Ruby On Rails
[Ruby on Rails] Implémentez un graphique circulaire qui spécifie le pourcentage de couleurs
[Introduction] Créer une application Ruby on Rails
Tutoriel pour créer un blog avec Rails pour les débutants Partie 1
Explication de Ruby on rails pour les débutants ③ ~ Création d'une base de données ~
Tutoriel pour créer un blog avec Rails pour les débutants Partie 2
Tutoriel pour créer un blog avec Rails pour les débutants Partie 0
Étapes pour créer un environnement de développement Ruby on Rails avec Vagrant
(Ruby on Rails6) Créer une fonction pour modifier le contenu publié
Créez un grand nombre d'enregistrements avec une seule commande à l'aide du fichier seeds.rb Ruby on Rails
[Ruby on Rails] Afficher le test avec RSpec
[Rails6] Créer une nouvelle application avec Rails [Débutant]
[Retrait des rails] Créez une fonction de retrait simple avec des rails
Remarques sur l'utilisation de FCM avec Ruby on Rails
Créer un graphique à barres simple avec MPAndroidChart
[Ruby on Rails] Test du contrôleur avec RSpec
Commande de création / suppression du contrôleur Ruby on Rails
[Rails 5] Créer une nouvelle application avec Rails [Débutant]
[Ruby on Rails] Test de modèle avec RSpec
Explication de Ruby sur rails pour les débutants ①
Débutant a créé un portfolio avec Ruby on Rails
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 5.x)
Paramètres de validation pour la fonction de connexion Ruby on Rails
[Rails] rails nouveau pour créer une base de données avec PostgreSQL
Présentation de Rspec avec Ruby on Rails x Docker
Publiez l'application avec ruby on rails
[Ruby on Rails] Mémo d'introduction Select2 pour Webpacker
Créez une discussion d'équipe avec Rails Action Cable
Présentation de Rspec, un framework de test pour Ruby on Rails
[Ruby on Rails] Un mémorandum de modèles de mise en page
[Ruby on Rails] Essayez de créer un service qui rend heureux les chats locaux
Créez un environnement de développement pour créer des applications Ruby on Jets + React avec Docker
(Ruby on Rails6) Création de données dans une table
Déterminez la page actuelle avec Ruby on Rails
[Ruby on Rails] Téléversement de plusieurs images avec refile
Commande Docker pour créer un projet Rails avec un seul coup dans l'environnement sans Ruby
Créer un environnement de développement Ruby on Rails sur AWS Cloud9
[Ruby on Rails] Supprimer les images s3 avec Active Strage
Créer un site EC avec Rails 5 ⑨ ~ Créer une fonction de panier ~
Exécutez des tests Ruby on Rails RSpec avec des actions GitHub
[Ruby on Rails] Comment changer le nom de la colonne
Créez un modèle pour le widget iOS14 avec la configuration d'intention.
[Ruby on Rails] Remplacez l'ID d'URL par le nom de la colonne
Explication de Ruby sur rails pour les débutants ⑥ ~ Création de validation ~
Explication de Ruby on rails pour les débutants ② ~ Création de liens ~
(Ruby on Rails6) Comment créer un modèle et une table
Création d'un plan de site au format RSS / Atom avec Ruby on Rails
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
Ruby on Rails élémentaire