[JAVA] Lorsque j'ai créé un graphique à barres avec MPAndroidChart, l'étiquette de l'axe des x était mal alignée pour une raison quelconque

introduction

J'ai eu l'opportunité de développer une application simple en utilisant Android Studio. Quand j'ai voulu y dessiner un graphique, j'ai trouvé que je devais utiliser une bibliothèque appelée "MPAndroidChart", j'ai donc créé un graphique à barres en me référant à certains sites. Cependant, l'étiquetage de l'axe x ne s'est pas bien passé et j'ai eu du mal pendant environ une heure, je vais donc décrire le processus et la solution. (Si vous avez la capacité disponible, je voudrais coller l'image qui a été déplacée plus tard)

Partie gênante

La partie qui n'est pas liée à ce problème est en grande partie cassée, mais le contour est le suivant. Je vais me référer à cet article.

"Création d'un graphique à barres simple avec MPAndroidChart" https://qiita.com/iKimishima/items/7fd192a074739cf5290b

MainActivity.java


public class MainActivity extends AppCompatActivity {

    protected BarChart chart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        chart = (BarChart) findViewById(R.id.chart1);

        //Afficher l'acquisition de données
        BarData data = new BarData(getBarData());
        chart.setData(data);

        //Axe X
        XAxis xAxis = chart.getXAxis();
        //Liste des étiquettes à afficher sur l'axe X(la première""Est la position de l'origine)
        final String[] labels = {"","pomme", "Mandarine", "Les pêches"};
        xAxis.setValueFormatter(new IndexAxisValueFormatter(labels));

    }

}

Surtout cette dernière partie.

xAxis.setValueFormatter(new IndexAxisValueFormatter(labels));

Sur d'autres sites, etc., celui défini à l'avance comme un tableau de chaînes est donné en argument au nouveau IndexAxisValueFormatter, mais pour une raison quelconque, l'axe peut ne pas s'afficher correctement en fonction des données à affecter. (À l'origine, les pommes, les mikans et les cuisses devraient être étiquetés pour les trois éléments, mais pour une raison quelconque, les trois éléments sont étiquetés comme des mikans, des cuisses (sans étiquettes). Juste le contenu des étiquettes. Cela a fonctionné dans certains cas)

Solution

Quelle que soit la raison, j'ai eu le sentiment que "il suffit d'aller vite", alors quand je l'ai recherché, je suis arrivé sur le site suivant.

"MPAndroidChart-Ajout d'une étiquette à un graphique à barres" https://www.366service.com/jp/qa/94329e5e85f6eddc6886945506ec0759

Ici, il y a une explication selon laquelle l'étiquette est définie en créant un formateur sans utiliser IndexAxisValueFormatter. Le graphique a été corrigé en insérant LabelFormatter dans la classe que vous souhaitez utiliser et en ajustant l'argument de setValueFormatter en conséquence.

hoge.java


//Jusqu'à il y a quelque temps
xAxis.setValueFormatter(new IndexAxisValueFormatter(labels));
//Après la mise à jour
xAxis.setValueFormatter(new LabelFormatter(labels));

fuga.java


 public class LabelFormatter implements IAxisValueFormatter {
    private final String[] mLabels;

    public LabelFormatter(String[] labels) {
        mLabels = labels;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
        return mLabels[(int) value];
    }
}

Après tout

Je ne savais pas pourquoi IndexAxisValueFormatter ne fonctionnait pas comme prévu. Je pense que cela a quelque chose à voir avec la version de la bibliothèque ... Étonnamment, il y avait peu d'articles autour de MPAndroidChart, et je n'ai pas trouvé de site japonais qui touche un mur similaire, alors j'en ai fait un article, bien qu'il s'agisse d'un recueil de connaissances. Je pense qu'il vaut mieux se référer à l'article suivant pour le code réel, etc.

Il y a de nombreux éléments à définir pour les graphiques, et je ne pouvais pas en trouver un qui était organisé de manière facile à comprendre, donc je voulais l'organiser moi-même si j'en avais l'occasion.

Des articles très utiles

"Création d'un graphique à barres simple avec MPAndroidChart" https://qiita.com/iKimishima/items/7fd192a074739cf5290b "MPAndroidChart-Ajout d'une étiquette à un graphique à barres" https://www.366service.com/jp/qa/94329e5e85f6eddc6886945506ec0759

Recommended Posts

Lorsque j'ai créé un graphique à barres avec MPAndroidChart, l'étiquette de l'axe des x était mal alignée pour une raison quelconque
Java: Une histoire qui m'a mis mal à l'aise quand on m'a appris à comparer des chaînes avec des égaux sans raison.
Dessinez un graphique à barres et un graphique linéaire en même temps avec MPAndroidChart
J'ai créé un outil de vérification pour le module de version
Quand la commande vagabond ne fonctionne pas
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 1)
J'ai vérifié car la réponse était étrange lors du débogage avec Tomcat 8
J'ai créé une fonction de réponse pour l'extension Rails Tutorial (Partie 5):
J'ai créé une interface graphique avec Swing
Une histoire à laquelle j'étais accro lors du test de l'API à l'aide de MockMVC
J'avais des problèmes au travail, j'ai donc créé un plug-in IntelliJ
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
J'étais coincé avec la gestion des fuseaux horaires lors du formatage avec SimpleDateFormat
Quand j'ai voulu créer une méthode pour Premium Friday, c'était déjà dans l'API standard Java 8
Créer un graphique à barres simple avec MPAndroidChart
J'ai fait une mort risquée avec Ruby
J'ai créé un plug-in pour IntelliJ IDEA
J'ai créé une application Janken avec kotlin
J'ai créé une application Janken avec Android
J'étais un peu accro à la comparaison S3 Checksum, alors prenez note.
J'ai créé une bibliothèque de graphiques simple pour les applications de smartphone [MP Android Chart Kai]
Une histoire dans laquelle j'étais vraiment quand j'ai fait triple DES avec ruby
[Incontournable pour les ingénieurs débutants] Une histoire que le monde s'est étendue lorsque j'ai exploité un service Web que j'ai créé moi-même