package tv.dyndns.kishibe.qmaclone.client.statistics;
import java.util.List;
import tv.dyndns.kishibe.qmaclone.client.game.ProblemGenre;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.gwt.visualization.client.AbstractDataTable;
import com.google.gwt.visualization.client.AbstractDataTable.ColumnType;
import com.google.gwt.visualization.client.DataTable;
import com.google.gwt.visualization.client.visualizations.corechart.LineChart;
import com.google.gwt.visualization.client.visualizations.corechart.Options;
public class ChartAccuracyRate extends LineChart {
public ChartAccuracyRate(int rate[][]) {
super(table(rate), options());
}
private static AbstractDataTable table(int rate[][]) {
Preconditions
.checkArgument(rate.length == ProblemGenre.values().length);
DataTable data = DataTable.create();
data.addRows(11);
// 正解率
data.addColumn(ColumnType.STRING, "正解率");
for (int row = 0; row <= 10; ++row) {
data.setValue(row, 0, (row * 10) + "%");
}
// ジャンルごとの正解率
int column = 1;
for (ProblemGenre genre : ProblemGenre.values()) {
Preconditions.checkArgument(rate[genre.getIndex()].length == 11);
data.addColumn(ColumnType.NUMBER, genre.toString());
int sum = 0;
for (int num : rate[genre.getIndex()]) {
sum += num;
}
for (int row = 0; row <= 10; ++row) {
data.setValue(row, column, 100.0 * rate[genre.getIndex()][row]
/ sum);
}
++column;
}
return data;
}
private static Options options() {
List<String> colors = Lists.newArrayList();
for (ProblemGenre genre : ProblemGenre.values()) {
colors.add(genre.getColor());
}
Options options = Options.create();
options.setColors(colors.toArray(new String[0]));
options.setCurveType("function");
options.setWidth(600);
options.setHeight(400);
options.setTitle("ジャンル別正解率");
return options;
}
}