回答編集履歴

1

見出し

2024/03/04 09:23

投稿

TN8001
TN8001

スコア9396

test CHANGED
@@ -1,269 +1,136 @@
1
1
  グラフを書くならExcelのほうが早いし簡単ですよね?
2
-
3
2
  学習目的か、なにか別の目的があるのかがわかったほうが回答しやすいです。
4
3
 
5
-
6
-
7
4
  自力で描きたい場合は、こちらがわかりやすそうです。
8
-
9
5
  [棒グラフをプログラムで作ってみる – Yasushi Noguchi Class](http://r-dimension.xsrv.jp/classes_j/bar_chart/)
10
6
 
11
-
12
-
13
7
  手っ取り早く表示するなら、このライブラリが参考コードもあってわかりやすそうでした。
14
-
15
8
  [giCentre utilities — giCentre](https://www.gicentre.net/utils)
16
9
 
17
-
18
-
19
- 適当にggっただけなので、他にもっといいものがあるかもしれません。
10
+ 適当にggっただけなので、他にもっといいものがあるかもしれません。
20
-
21
-
22
11
 
23
12
  配列で詰まっておられるようなので、簡単にサンプルを作ってみました。
24
13
 
14
+ # 自力版
15
+ ```Processing
16
+ void setup() {
17
+ background(255);
18
+ size(800, 400);
19
+ noLoop();
25
20
 
21
+ Table csvData = loadTable("2.csv", "header,csv");
22
+ int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数)
26
23
 
27
- 自力版
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の配列
28
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
+ # ライブラリ版
29
72
  ```Processing
73
+ import org.gicentre.utils.stat.*; // グラフライブラリを使えるようにする
30
74
 
75
+ // 各関数(setupとdraw)で使えるようにBarChart型の変数を宣言
31
- void setup() {
76
+ BarChart barChart;
32
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
+ {
33
122
  background(255);
34
123
 
35
- size(800, 400);
124
+ // 表示範囲を決めグラフの表示
36
-
125
+ barChart.draw(15, 15, width - 30, height - 30);
37
126
  noLoop();
38
-
39
-
40
-
41
- Table csvData = loadTable("2.csv", "header,csv");
42
-
43
- int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数)
44
-
45
-
46
-
47
- // データ分の配列を作成
48
-
49
- String[] names = new String[rowCount]; // 名前の配列
50
-
51
- int[] heights = new int[rowCount]; // 身長の配列
52
-
53
- int[] weights = new int[rowCount]; // 体重の配列
54
-
55
- float[] bmis = new float[rowCount]; // BMIの配列
56
-
57
-
58
-
59
- // データを配列に代入
60
-
61
- for (int i = 0; i < rowCount; i++) {
62
-
63
- names[i] = csvData.getString(i, "名前");
64
-
65
- heights[i] = csvData.getInt(i, "身長");
66
-
67
- weights[i] = csvData.getInt(i, "体重");
68
-
69
- bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m))
70
-
71
-
72
-
73
- println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]);
74
-
75
- }
76
-
77
-
78
-
79
- // 表の表示
80
-
81
- fill(0);
82
-
83
- for (int i = 0; i < rowCount; i++) {
84
-
85
- int y = 20 + i * 20;
86
-
87
- text(names[i], 10, y);
88
-
89
- text(heights[i], 50, y);
90
-
91
- text(weights[i], 90, y);
92
-
93
- text(bmis[i], 130, y);
94
-
95
- }
96
-
97
-
98
-
99
- // グラフ背景の表示
100
-
101
- int scale = 10; // 数字が小さいので引き延ばす倍率
102
-
103
- fill(250, 100, 100); // 肥満の色
104
-
105
- rect(180, 0, 40 * scale, rowCount * 23);
106
-
107
-
108
-
109
- fill(250, 250, 200); // 普通の色
110
-
111
- rect(180, 0, 25 * scale, rowCount * 23);
112
-
113
-
114
-
115
- fill(170, 250, 250); // 痩せの色
116
-
117
- rect(180, 0, 18.5 * scale, rowCount * 23);
118
-
119
-
120
-
121
- // グラフの表示
122
-
123
- fill(127);
124
-
125
- for (int i = 0; i < rowCount; i++) {
126
-
127
- int y = 5 + i * 22;
128
-
129
- rect(180, y, bmis[i] * scale, 15);
130
-
131
- }
132
-
133
127
  }
134
-
135
128
  ```
136
-
137
- ![実行結果](90329ab6d2d395a1e785961e78fd5995.png)
129
+ ![実行結果](4a182f53e2b7f2a8973891fbdce92267.png)
138
-
139
- ライブラリ版
130
+ 2.csv
140
-
141
- ```Processing
131
+ ```csv
142
-
143
- import org.gicentre.utils.stat.*; // グラフライブラリを使えるようにする
144
-
145
-
146
-
147
- // 各関数(setupとdraw)で使えるようにBarChart型の変数を宣言
148
-
149
- BarChart barChart;
150
-
151
-
152
-
153
- void setup()
132
+ 名前,身長,体重
154
-
155
- {
156
-
157
- size(800, 400);
133
+ Aさん,182,80
158
-
159
-
160
-
161
- Table csvData = loadTable("2.csv", "header,csv");
162
-
163
- int rowCount = csvData.getRowCount(); // ヘッダを除いた行数(データ件数)
164
-
165
-
166
-
167
- // データ分の配列を作成
168
-
169
- String[] names = new String[rowCount]; // 名前の配列
170
-
171
- int[] heights = new int[rowCount]; // 身長の配列
172
-
173
- int[] weights = new int[rowCount]; // 体重の配列
174
-
175
- float[] bmis = new float[rowCount]; // BMIの配列
176
-
177
-
178
-
179
- // データを配列に代入
180
-
181
- for (int i = 0; i < rowCount; i++) {
182
-
183
- names[i] = csvData.getString(i, "名前");
184
-
185
- heights[i] = csvData.getInt(i, "身長");
186
-
187
- weights[i] = csvData.getInt(i, "体重");
188
-
189
- bmis[i] = weights[i] / ((heights[i] * 0.01) * (heights[i] * 0.01)); // 体重(kg) / (身長(m) * 身長(m))
190
-
191
-
192
-
193
- println("名前:" + names[i] + " 身長:" + heights[i] + "cm 体重:" + weights[i] + "kg BMI:" + bmis[i]);
194
-
195
- }
196
-
197
-
198
-
199
- // BarChartの作成・データをセット
200
-
201
- barChart = new BarChart(this);
202
-
203
- barChart.setData(bmis);
204
-
205
- barChart.setBarLabels(names);
206
-
207
-
208
-
209
- // 最大値・最小値の設定
210
-
211
- barChart.setMinValue(0);
212
-
213
- barChart.setMaxValue(40);
214
-
215
-
216
-
217
- // 色の設定
218
-
219
- barChart.setAxisColour(0);
220
-
221
- barChart.setAxisLabelColour(0);
222
-
223
- barChart.setAxisValuesColour(0);
224
-
225
-
226
-
227
- // 軸の表示
228
-
229
- barChart.showValueAxis(true);
230
-
231
- barChart.showCategoryAxis(true);
232
-
233
- }
234
-
235
-
236
-
237
- void draw()
134
+ Bさん,167,48
238
-
239
- {
240
-
241
- background(255);
242
-
243
-
244
-
245
- // 表示範囲を決めグラフの表示
246
-
247
- barChart.draw(15, 15, width - 30, height - 30);
248
-
249
- noLoop();
135
+ Cさん,170,98
250
-
251
- }
252
-
253
136
  ```
254
-
255
- ![実行結果](4a182f53e2b7f2a8973891fbdce92267.png)
256
-
257
- 2.csv
258
-
259
- ```csv
260
-
261
- 名前,身長,体重
262
-
263
- Aさん,182,80
264
-
265
- Bさん,167,48
266
-
267
- Cさん,170,98
268
-
269
- ```