質問するログイン新規登録

回答編集履歴

1

見出し

2024/03/04 09:23

投稿

TN8001
TN8001

スコア10213

answer CHANGED
@@ -1,135 +1,136 @@
1
- グラフを書くならExcelのほうが早いし簡単ですよね?
2
- 学習目的か、なにか別の目的があるのかがわかったほうが回答しやすいです。
3
-
4
- 自力で描きたい場合は、こちらがわかりやすそうです。
5
- [棒グラフをプログラムで作ってみる – Yasushi Noguchi Class](http://r-dimension.xsrv.jp/classes_j/bar_chart/)
6
-
7
- 手っ取り早く表示するなら、このライブラリが参考コードもあってわかりやすそうでした。
8
- [giCentre utilities — giCentre](https://www.gicentre.net/utils)
9
-
10
- 適当にggっただけなので、他にもっといいものがあるかもしれません。
11
-
12
- 配列で詰まっておられるようなので、簡単にサンプルを作ってみました。
13
-
14
- 自力版
15
- ```Processing
16
- void setup() {
17
- background(255);
18
- size(800, 400);
19
- noLoop();
20
-
21
- Table csvData = loadTable("2.csv", "header,csv");
22
- int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数)
23
-
24
- // データ分の配列を作成
25
- String[] names = new String[rowCount]; // 名前の配列
26
- int[] heights = new int[rowCount]; // 身長の配列
27
- int[] weights = new int[rowCount]; // 体重の配列
28
- float[] bmis = new float[rowCount]; // BMIの配列
29
-
30
- // データを配列に代入
31
- for (int i = 0; i < rowCount; i++) {
32
- names[i] = csvData.getString(i, "名前");
33
- heights[i] = csvData.getInt(i, "身長");
34
- weights[i] = csvData.getInt(i, "体重");
35
- bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m))
36
-
37
- println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]);
38
- }
39
-
40
- // 表の表示
41
- fill(0);
42
- for (int i = 0; i < rowCount; i++) {
43
- int y = 20 + i * 20;
44
- text(names[i], 10, y);
45
- text(heights[i], 50, y);
46
- text(weights[i], 90, y);
47
- text(bmis[i], 130, y);
48
- }
49
-
50
- // グラフ背景の表示
51
- int scale = 10; // 数字が小さいので引き延ばす倍率
52
- fill(250, 100, 100); // 肥満の色
53
- rect(180, 0, 40 * scale, rowCount * 23);
54
-
55
- fill(250, 250, 200); // 普通の色
56
- rect(180, 0, 25 * scale, rowCount * 23);
57
-
58
- fill(170, 250, 250); // 痩せの色
59
- rect(180, 0, 18.5 * scale, rowCount * 23);
60
-
61
- // グラフの表示
62
- fill(127);
63
- for (int i = 0; i < rowCount; i++) {
64
- int y = 5 + i * 22;
65
- rect(180, y, bmis[i] * scale, 15);
66
- }
67
- }
68
- ```
69
- ![実行結果](90329ab6d2d395a1e785961e78fd5995.png)
70
- ライブラリ版
71
- ```Processing
72
- import org.gicentre.utils.stat.*; // グラフライブラリを使えるようにする
73
-
74
- // 各関数(setupとdraw)で使えるようにBarChart型の変数を宣言
75
- BarChart barChart;
76
-
77
- void setup()
78
- {
79
- size(800, 400);
80
-
81
- Table csvData = loadTable("2.csv", "header,csv");
82
- int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数)
83
-
84
- // データ分の配列を作成
85
- String[] names = new String[rowCount]; // 名前の配列
86
- int[] heights = new int[rowCount]; // 身長の配列
87
- int[] weights = new int[rowCount]; // 体重の配列
88
- float[] bmis = new float[rowCount]; // BMIの配列
89
-
90
- // データを配列に代入
91
- for (int i = 0; i < rowCount; i++) {
92
- names[i] = csvData.getString(i, "名前");
93
- heights[i] = csvData.getInt(i, "身長");
94
- weights[i] = csvData.getInt(i, "体重");
95
- bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m))
96
-
97
- println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]);
98
- }
99
-
100
- // BarChartの作成・データをセット
101
- barChart = new BarChart(this);
102
- barChart.setData(bmis);
103
- barChart.setBarLabels(names);
104
-
105
- // 最大値・最小値の設定
106
- barChart.setMinValue(0);
107
- barChart.setMaxValue(40);
108
-
109
- // 色の設定
110
- barChart.setAxisColour(0);
111
- barChart.setAxisLabelColour(0);
112
- barChart.setAxisValuesColour(0);
113
-
114
- // 軸の表示
115
- barChart.showValueAxis(true);
116
- barChart.showCategoryAxis(true);
117
- }
118
-
119
- void draw()
120
- {
121
- background(255);
122
-
123
- // 表示範囲を決めグラフの表示
124
- barChart.draw(15, 15, width - 30, height - 30);
125
- noLoop();
126
- }
127
- ```
128
- ![実行結果](4a182f53e2b7f2a8973891fbdce92267.png)
129
- 2.csv
130
- ```csv
131
- 名前,身長,体重
132
- Aさん,182,80
133
- Bさん,167,48
134
- Cさん,170,98
1
+ グラフを書くならExcelのほうが早いし簡単ですよね?
2
+ 学習目的か、なにか別の目的があるのかがわかったほうが回答しやすいです。
3
+
4
+ 自力で描きたい場合は、こちらがわかりやすそうです。
5
+ [棒グラフをプログラムで作ってみる – Yasushi Noguchi Class](http://r-dimension.xsrv.jp/classes_j/bar_chart/)
6
+
7
+ 手っ取り早く表示するなら、このライブラリが参考コードもあってわかりやすそうでした。
8
+ [giCentre utilities — giCentre](https://www.gicentre.net/utils)
9
+
10
+ 適当にggっただけなので、他にもっといいものがあるかもしれません。
11
+
12
+ 配列で詰まっておられるようなので、簡単にサンプルを作ってみました。
13
+
14
+ # 自力版
15
+ ```Processing
16
+ void setup() {
17
+ background(255);
18
+ size(800, 400);
19
+ noLoop();
20
+
21
+ Table csvData = loadTable("2.csv", "header,csv");
22
+ int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数)
23
+
24
+ // データ分の配列を作成
25
+ String[] names = new String[rowCount]; // 名前の配列
26
+ int[] heights = new int[rowCount]; // 身長の配列
27
+ int[] weights = new int[rowCount]; // 体重の配列
28
+ float[] bmis = new float[rowCount]; // BMIの配列
29
+
30
+ // データを配列に代入
31
+ for (int i = 0; i < rowCount; i++) {
32
+ names[i] = csvData.getString(i, "名前");
33
+ heights[i] = csvData.getInt(i, "身長");
34
+ weights[i] = csvData.getInt(i, "体重");
35
+ bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m))
36
+
37
+ println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]);
38
+ }
39
+
40
+ // 表の表示
41
+ fill(0);
42
+ for (int i = 0; i < rowCount; i++) {
43
+ int y = 20 + i * 20;
44
+ text(names[i], 10, y);
45
+ text(heights[i], 50, y);
46
+ text(weights[i], 90, y);
47
+ text(bmis[i], 130, y);
48
+ }
49
+
50
+ // グラフ背景の表示
51
+ int scale = 10; // 数字が小さいので引き延ばす倍率
52
+ fill(250, 100, 100); // 肥満の色
53
+ rect(180, 0, 40 * scale, rowCount * 23);
54
+
55
+ fill(250, 250, 200); // 普通の色
56
+ rect(180, 0, 25 * scale, rowCount * 23);
57
+
58
+ fill(170, 250, 250); // 痩せの色
59
+ rect(180, 0, 18.5 * scale, rowCount * 23);
60
+
61
+ // グラフの表示
62
+ fill(127);
63
+ for (int i = 0; i < rowCount; i++) {
64
+ int y = 5 + i * 22;
65
+ rect(180, y, bmis[i] * scale, 15);
66
+ }
67
+ }
68
+ ```
69
+ ![実行結果](90329ab6d2d395a1e785961e78fd5995.png)
70
+
71
+ # ライブラリ版
72
+ ```Processing
73
+ import org.gicentre.utils.stat.*; // グラフライブラリを使えるようにする
74
+
75
+ // 各関数(setupとdraw)で使えるようにBarChart型の変数を宣言
76
+ BarChart barChart;
77
+
78
+ void setup()
79
+ {
80
+ size(800, 400);
81
+
82
+ Table csvData = loadTable("2.csv", "header,csv");
83
+ int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数)
84
+
85
+ // データ分の配列を作成
86
+ String[] names = new String[rowCount]; // 名前の配列
87
+ int[] heights = new int[rowCount]; // 身長の配列
88
+ int[] weights = new int[rowCount]; // 体重の配列
89
+ float[] bmis = new float[rowCount]; // BMIの配列
90
+
91
+ // データを配列に代入
92
+ for (int i = 0; i < rowCount; i++) {
93
+ names[i] = csvData.getString(i, "名前");
94
+ heights[i] = csvData.getInt(i, "身長");
95
+ weights[i] = csvData.getInt(i, "体重");
96
+ bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m))
97
+
98
+ println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]);
99
+ }
100
+
101
+ // BarChartの作成・データをセット
102
+ barChart = new BarChart(this);
103
+ barChart.setData(bmis);
104
+ barChart.setBarLabels(names);
105
+
106
+ // 最大値・最小値の設定
107
+ barChart.setMinValue(0);
108
+ barChart.setMaxValue(40);
109
+
110
+ // 色の設定
111
+ barChart.setAxisColour(0);
112
+ barChart.setAxisLabelColour(0);
113
+ barChart.setAxisValuesColour(0);
114
+
115
+ // 軸の表示
116
+ barChart.showValueAxis(true);
117
+ barChart.showCategoryAxis(true);
118
+ }
119
+
120
+ void draw()
121
+ {
122
+ background(255);
123
+
124
+ // 表示範囲を決めグラフの表示
125
+ barChart.draw(15, 15, width - 30, height - 30);
126
+ noLoop();
127
+ }
128
+ ```
129
+ ![実行結果](4a182f53e2b7f2a8973891fbdce92267.png)
130
+ 2.csv
131
+ ```csv
132
+ 名前,身長,体重
133
+ Aさん,182,80
134
+ Bさん,167,48
135
+ Cさん,170,98
135
136
  ```