[JAVA] [Rails] Erstellung der zweiten vertikalen Achse und japanische Lokalisierung beim Zeichnen mit amCharts4 usw.

Einführung

In diesem Artikel verwenden wir amChart, eine JavaScript-Diagrammzeichnungsbibliothek, um zu erläutern, wie beim Implementieren eines mehrachsigen Liniendiagramms eine zweite vertikale Achse erstellt und auf Japanisch angepasst wird.

Entwicklungsumgebung

Ruby 2.5.1 Rails 5.2.4.4

Was ist amCharts?

amCharts ist eine Javascript-Grafikzeichnungsbibliothek, die verschiedene Arten von Hochleistungsgraphen zeichnen kann.

Offizielle Referenz: https://www.amcharts.com/docs/v4/

Da es auf Japanisch nicht viele Informationen gibt, empfehlen wir, dass Sie sich beim Anpassen auf die offizielle Referenz beziehen.

Vollständiges Bild

Derzeit entwickeln wir eine App, mit der Gewicht und Körperfettanteil aufgezeichnet und grafisch dargestellt werden können. Ich habe amCharts4 verwendet, um das Datum auf der horizontalen Achse, das Gewicht auf der ersten vertikalen Achse und das Körperfettverhältnis auf der zweiten vertikalen Achse in einem Diagramm zu zeichnen.

Die folgende Grafik zeigt das fertige Bild. ezgif-6-ef32c8681700.gif

Implementierungsverfahren / Erklärung

Einführung von amCharts

In diesem Artikel erfahren Sie, wie Sie amCharts installieren. Erstellen Sie ein Diagramm mit amcharts 4 Demos

Erstellen eines Diagramms, wenn die Werte auf der horizontalen Achse diskontinuierlich sind

Zum Erstellen des Diagramms, wenn die Werte auf der horizontalen Achse dieses Artikels diskontinuierlich sind, habe ich auf den folgenden Artikel verwiesen. Erstellen Sie mit amCharts ein Faltliniendiagramm für Werte, die in diskontinuierlichen Intervallen (Daten usw.) in Rails veröffentlicht werden.

Vorbereitung der Demo-Daten

Legen Sie die CSV-Datei ab und bereiten Sie die folgenden Demo-Daten vor.

id date weight body_fat_percentage
1 2020/06/08 72 15
2 ・ ・ ・ ・ ・ ・ ・ ・ ・

Beispielcode abgeschlossen

Ich werde den Beispielcode vor der Erklärung einfügen. Die Beschreibung auf der Rails-Seite wird diesmal weggelassen.

record.html.erb
<style>
  #chartdiv {
    width: 700px;
    height: 300px;
  }
</style>

//Laden Sie die gewünschte JS-Datei
<script src="https://www.amcharts.com/lib/4/core.js"></script>
<script src="https://www.amcharts.com/lib/4/charts.js"></script>
<script src="https://www.amcharts.com/lib/4/themes/animated.js"></script>
<script src="//www.amcharts.com/lib/4/lang/ja_JP.js"></script>

<script>
am4core.ready(function() {

am4core.useTheme(am4themes_animated);

var chart = am4core.create("chartdiv", am4charts.XYChart);
chart.dateFormatter.language = new am4core.Language();
chart.dateFormatter.language.locale = am4lang_ja_JP;
chart.language.locale["_date_day"] = "MMMdd Tag";
chart.language.locale["_date_year"] = "";

const weights = <%== JSON.dump(@weights) %>;
const body_fat_percentages = <%== JSON.dump(@body_fat_percentages) %>;
const dates = <%== JSON.dump(@dates) %>;

var firstDate = new Date(dates[0])
var lastDate = new Date(dates.slice(-1)[0])
var termDate = (lastDate - firstDate) / 1000 / 60 / 60 / 24 + 1

function generateChartData() {
  var chartData = [];
  for (var j = 0; j < weights.length; j++ ) {
    for (var i = 0; i < termDate; i++ ) {
      var newDate = new Date(firstDate)
      newDate.setDate(newDate.getDate() + i);
      if ((new Date(dates[j])) - (newDate) == 0 ){
        weight = weights[j]
        body_fat_percentage = body_fat_percentages[j]
        chartData.push({
          date1: newDate,
          weight: weight,
          date2: newDate,
          body_fat_percentage: body_fat_percentage
        });
      }
    }
  }
  return chartData;
}

chart.data = generateChartData();

//
var title = chart.titles.create();
title.text = ""; //
title.fontSize = 15; //
//
title.tooltipText = "Einstellung des Diagrammtitels Übergang des Gewichts- / Körperfettverhältnisses Einstellung des Diagrammtitels Einstellung der Schriftgröße des Diagrammtitels Einstellung des Inhalts der QuickInfo-Anzeige, die angezeigt wird, wenn der Titel mit der Maus bewegt wird. Sie können ihn mit der Bildlaufleiste vergrößern."; 

//Einstellung der ersten horizontalen Achse
var dateAxis = chart.xAxes.push(new am4charts.DateAxis());
dateAxis.renderer.grid.template.location = 0;
dateAxis.renderer.labels.template.fill = am4core.color("#ffffff");

//2. horizontale Achseneinstellung
var dateAxis2 = chart.xAxes.push(new am4charts.DateAxis());
dateAxis2.tooltip.disabled = true; //Tooltip-Einstellung zum Ausblenden
dateAxis2.renderer.grid.template.location = 0;
dateAxis2.renderer.labels.template.fill = am4core.color("#000000");

//Einstellung der ersten vertikalen Achse
var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis.tooltip.disabled = true;
valueAxis.renderer.labels.template.fill = am4core.color("#e59165");
valueAxis.renderer.minWidth = 60;
valueAxis.renderer.labels.template.adapter.add("text", function(text) {
  return text + "kg";
});
valueAxis.renderer.fontWeight = "bold"; //Ändern Sie den Achsenwert in Fettdruck

//Einstellung der zweiten vertikalen Achse
var valueAxis2 = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis2.tooltip.disabled = true;
valueAxis2.renderer.grid.template.strokeDasharray = "2,3";
valueAxis2.renderer.labels.template.fill = am4core.color("#dfcc64");
valueAxis2.renderer.minWidth = 60;
valueAxis2.renderer.labels.template.adapter.add("text", function(text) {
  return text + "%";
});
valueAxis2.renderer.opposite = true; //Stellen Sie die zweite vertikale Achse nach rechts ein
valueAxis2.renderer.fontWeight = "bold"; //Ändern Sie den Achsenwert in Fettdruck

//Einstellen des Wertes für die erste vertikale Achse
var series = chart.series.push(new am4charts.LineSeries());
series.name = "Körpergewicht";
series.dataFields.dateX = "date1";
series.dataFields.valueY = "weight";
series.tooltipText = "{valueY.value}kg";
series.fill = am4core.color("#e59165");
series.stroke = am4core.color("#e59165");
series.smoothing = "monotoneX";
series.strokeWidth = 2;

//Einstellpunkte der Serie(1. vertikale Achse)
var bullet = series.bullets.push(new am4charts.Bullet());
var circle = bullet.createChild(am4core.Circle);
circle.width = 5;
circle.height = 5;
circle.horizontalCenter = "middle";
circle.verticalCenter = "middle";

//Einstellen des Wertes für die erste vertikale Achse
var series2 = chart.series.push(new am4charts.LineSeries());
series2.name = "Körperfettanteil";
series2.dataFields.dateX = "date2";
series2.dataFields.valueY = "body_fat_percentage";
series2.yAxis = valueAxis2;
series2.xAxis = dateAxis2;
series2.tooltipText = "{valueY.value}%"; //Einstellungen für die Anzeige von Werkzeugchips
series2.fill = am4core.color("#dfcc64"); //Werkzeugspitzenfarbe
series2.stroke = am4core.color("#dfcc64"); //Diagrammlinienfarbe
series2.smoothing = "monotoneX";
series2.strokeWidth = 2;

//Einstellpunkte der Serie(2. vertikale Achse)
var bullet2 = series2.bullets.push(new am4charts.Bullet());
var circle2 = bullet2.createChild(am4core.Circle);
circle2.width = 5;
circle2.height = 5;
circle2.horizontalCenter = "middle";
circle2.verticalCenter = "middle";

chart.scrollbarX = new am4core.Scrollbar(); //Bildlaufleisteneinstellungen

//Cursor setzen
chart.cursor = new am4charts.XYCursor();
chart.cursor.xAxis = dateAxis2;

//Legendeneinstellungen
chart.legend = new am4charts.Legend();
chart.legend.parent = chart.plotContainer;
chart.legend.zIndex = 100;
chart.legend.position = "top";
chart.legend.contentAlign = "right";

//Gitterlinieneinstellungen
valueAxis2.renderer.grid.template.strokeOpacity = 0.07;
dateAxis2.renderer.grid.template.strokeOpacity = 0.07;
dateAxis.renderer.grid.template.strokeOpacity = 0.07;
valueAxis.renderer.grid.template.strokeOpacity = 0.07;

});
</script>

<div id="chartdiv"></div>

Kommentar

Einstellung mehrerer vertikaler Achsen

Wie im Beispielcode gezeigt, müssen bei einem mehrachsigen Diagramm jede Achse und jeder Wert eingestellt werden. Nehmen Sie Einstellungen wie die jeweils zu verwendenden Daten vor.

Lokalisierung ins Japanische

Wenn die horizontale Achse Datum ist, lautet die Standardnotation Amerikanisch, daher wird sie wie unten gezeigt in Englisch angezeigt. スクリーンショット 2020-10-25 22.02.52.png

Es gibt kein Problem, aber wenn Sie "◯ Monat ◯ Tag" schreiben möchten, fügen Sie die folgenden Einstellungen hinzu. Mit den Standardübersetzungseinstellungen kann beispielsweise "Aug" in "August" übersetzt werden, die Anzahl der Tage wird jedoch nicht als "XX Tage" übersetzt. Fügen Sie daher Ihre eigenen Regeln wie folgt hinzu. Sie können das gleiche für das Jahr tun.

<script src="//www.amcharts.com/lib/4/lang/ja_JP.js"></script> //Rufen Sie die Gebietsschemadatei auf
<script>
//Unterlassung
chart.dateFormatter.language = new am4core.Language(); //Standardeinstellungen für die Übersetzung
chart.dateFormatter.language.locale = am4lang_ja_JP; //Standardeinstellungen für die Übersetzung
chart.language.locale["_date_day"] = "MMMdd Tag";Überschreiben Sie mit Ihren eigenen Regeln
chart.language.locale["_date_year"] = "JJJJ Jahr";Überschreiben Sie mit Ihren eigenen Regeln
//Unterlassung
</script>

[Referenzlink]  https://www.amcharts.com/docs/v4/concepts/locales/  https://github.com/amcharts/amcharts4/blob/master/src/lang/ja_JP.ts

Einstellung der zweiten vertikalen Achse

Bei den Standardeinstellungen befinden sich sowohl die erste vertikale Achse als auch die zweite vertikale Achse auf der linken Seite. スクリーンショット 2020-10-25 22.14.34.png Es ist etwas schwer zu erkennen. Wenn Sie also die zweite vertikale Achse nach rechts ändern möchten, fügen Sie die folgenden Einstellungen hinzu.

valueAxis2.renderer.opposite = true; //Stellen Sie die zweite vertikale Achse nach rechts ein

Einführung weiterer zusätzlicher Einstellungen

Datenpunkte können für jede Serie festgelegt werden. Sie können es in ein Quadrat ändern, indem Sie den Kreis in ein Quadrat ändern.

var bullet = series.bullets.push(new am4charts.Bullet());
var circle = bullet.createChild(am4core.Circle);
circle.width = 5;
circle.height = 5;
circle.horizontalCenter = "middle";
circle.verticalCenter = "middle";

[Referenzlink]  https://www.amcharts.com/docs/v4/concepts/bullets/

series.smoothing = "monotoneX";
series2.fill = am4core.color("#dfcc64"); //Werkzeugspitzenfarbe
series2.stroke = am4core.color("#dfcc64"); //Diagrammlinienfarbe

Zusammenfassung

Mit amCharts können Sie Hochleistungsdiagramme zeichnen. Sie können andere Diagramme als das Liniendiagramm erstellen. Es gibt nicht viele Informationen auf Japanisch. Wenn Sie sie anpassen möchten, empfehlen wir Ihnen, sich auf die offizielle Referenz zu beziehen.

Referenz-URL

Erstellen Sie ein Diagramm mit amcharts 4 Demos Erstellen Sie mit amCharts ein Faltliniendiagramm für Werte, die in diskontinuierlichen Intervallen (Daten usw.) in Rails veröffentlicht werden.

Recommended Posts

[Rails] Erstellung der zweiten vertikalen Achse und japanische Lokalisierung beim Zeichnen mit amCharts4 usw.
Erweitern Sie Highfaces, um die vertikale Achse des Diagramms umzudrehen
[Rails] So zeigen Sie die Wettervorhersage der registrierten Adresse auf Japanisch mit OpenWeatherMap an
[Rails] Japanische Lokalisierung der Fehlermeldung bei Verwendung des Formularobjekts
[Rails] Japanische Lokalisierung mit Rails-i18n
[Rails] Japanische Lokalisierung von Fehlermeldungen
[Rails] Validierungseinstellungen und japanische Lokalisierung
Berechnen Sie den Prozentsatz von "gut", "normal" und "schlecht" im Fragebogen mit SQL
Zeigen Sie den japanischen Kalender und Tag mit der Java8-Standardklasse an
Die Identität der Schienenparameter [: id]
Japanische Lokalisierung von CentOS 8 und japanisches Tastaturlayout