質問編集履歴

7

質問したい内容について追記

2021/06/27 11:58

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,12 @@
18
18
 
19
19
  しているのですが、よい方法をご教示いただけないでしょうか。
20
20
 
21
+ 追記:ファイル形式はjsonにこだわらないので、ファイルから読み込んだデータに対して
22
+
23
+ 長々と代入文を書くのではなく、読み込んだデータをもとに、短い行数でパラメータを
24
+
25
+ 設定するような工夫ができないかをご質問したいという意図でした。文章が分かりにくく申し訳ありません。
26
+
21
27
 
22
28
 
23
29
  ~~追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、

6

誤記修正

2021/06/27 11:58

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
  import json
38
38
 
39
- with open('graph_param.json', encoding='cp932') as f:
39
+ with open('graph_param.json', encoding='utf-8') as f:
40
40
 
41
41
  dct = json.load(f)
42
42
 

5

解決した部分の内容について追記

2021/06/27 11:46

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -20,26 +20,30 @@
20
20
 
21
21
 
22
22
 
23
- 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、
23
+ ~~追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、
24
24
 
25
25
  d = json.loads("graph_param.json")のように辞書で読み込もうとしたのですが、
26
26
 
27
27
  JSONDecodeError: Expecting value: line 1 column 1 (char 0)となってしまいます。
28
28
 
29
- エラーメッセージを見る限り、1行目がおかしいのだと思うのですが、どこがおかしいのかがわからず、
30
-
31
- ご教示いただくことは可能でしょうか。
32
-
33
- ご指摘をいただいた内容、およびエラーコードから検索した下記のサイトを見る限り、文字コードが怪しいのかと思い、
34
-
35
- VSCodeで、エンコーディングをutf-8などに変更して保存しましたが、エラーは変化しませんでした。
36
-
37
-
38
-
39
29
  参考:
40
30
 
41
31
  https://sasuwo.org/python_reading_json_error/
42
32
 
33
+ ~~
34
+
35
+ すみません。この件はご指摘いただき,下記で解決しました。(基礎的な文法ミスでした)
36
+
37
+ import json
38
+
39
+ with open('graph_param.json', encoding='cp932') as f:
40
+
41
+ dct = json.load(f)
42
+
43
+
44
+
45
+
46
+
43
47
 
44
48
 
45
49
  ### 該当のソースコード

4

読み込み処理が不明確な記載だったので修正

2021/06/27 11:44

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,9 @@
20
20
 
21
21
 
22
22
 
23
- 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、load_jsonしたのですが、
23
+ 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、
24
+
25
+ d = json.loads("graph_param.json")のように辞書で読み込もうとしたのですが、
24
26
 
25
27
  JSONDecodeError: Expecting value: line 1 column 1 (char 0)となってしまいます。
26
28
 
@@ -44,7 +46,7 @@
44
46
 
45
47
 
46
48
 
47
- ```json(graph_param.json)
49
+ ``` json(graph_param.json)
48
50
 
49
51
  {
50
52
 

3

ファイルの文字コードについて明記しました。

2021/06/27 11:27

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -28,6 +28,16 @@
28
28
 
29
29
  ご教示いただくことは可能でしょうか。
30
30
 
31
+ ご指摘をいただいた内容、およびエラーコードから検索した下記のサイトを見る限り、文字コードが怪しいのかと思い、
32
+
33
+ VSCodeで、エンコーディングをutf-8などに変更して保存しましたが、エラーは変化しませんでした。
34
+
35
+
36
+
37
+ 参考:
38
+
39
+ https://sasuwo.org/python_reading_json_error/
40
+
31
41
 
32
42
 
33
43
  ### 該当のソースコード
@@ -238,6 +248,8 @@
238
248
 
239
249
  jsonのパラメータについて検索して、パラメータを読み込もうとしてみた。
240
250
 
251
+ エラーコードから検索したサイトを調べ、ファイルの文字コードなどを変更してみた。
252
+
241
253
 
242
254
 
243
255
  ### 補足情報(FW/ツールのバージョンなど)

2

jsonファイルの読み込みエラーが出ることについて追記した。

2021/06/27 11:25

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -20,10 +20,110 @@
20
20
 
21
21
 
22
22
 
23
+ 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、load_jsonしたのですが、
24
+
25
+ JSONDecodeError: Expecting value: line 1 column 1 (char 0)となってしまいます。
26
+
27
+ エラーメッセージを見る限り、1行目がおかしいのだと思うのですが、どこがおかしいのかがわからず、
28
+
29
+ ご教示いただくことは可能でしょうか。
30
+
31
+
32
+
23
33
  ### 該当のソースコード
24
34
 
25
35
 
26
36
 
37
+ ```json(graph_param.json)
38
+
39
+ {
40
+
41
+ "chart_setting":{
42
+
43
+ "style_val":2,
44
+
45
+ "height":12,
46
+
47
+ "width":12,
48
+
49
+ "title":"test_散布図",
50
+
51
+ "x_axis_title":"x座標",
52
+
53
+ "y_axis_title":"y座標"
54
+
55
+ },
56
+
57
+ "marker1_setting":{
58
+
59
+ "read_x_col":5,
60
+
61
+ "read_y_col":6,
62
+
63
+ "mark_symbol":"circle",
64
+
65
+ "mark_size":12,
66
+
67
+ "solidFill":"FF0000",
68
+
69
+ "line_solidFill":"0000FF"
70
+
71
+ },
72
+
73
+ "marker2_setting":{
74
+
75
+ "read_x_col":5,
76
+
77
+ "read_y_col":9,
78
+
79
+ "mark_symbol":"regtangle",
80
+
81
+ "mark_size":10,
82
+
83
+ "solidFill":"FFFF00",
84
+
85
+ "line_solidFill":"00FFFF"
86
+
87
+ },
88
+
89
+ "marker3_setting":{
90
+
91
+ "read_x_col":5,
92
+
93
+ "read_y_col":10,
94
+
95
+ "mark_symbol":"circle",
96
+
97
+ "mark_size":8,
98
+
99
+ "solidFill":"FF00FF",
100
+
101
+ "line_solidFill":"FF00FF"
102
+
103
+ },
104
+
105
+ "marker4_setting":{
106
+
107
+ "read_x_col":5,
108
+
109
+ "read_y_col":11,
110
+
111
+ "mark_symbol":"regtangle",
112
+
113
+ "mark_size":6,
114
+
115
+ "solidFill":"FFF0FF",
116
+
117
+ "line_solidFill":"FFF0FF"
118
+
119
+ }
120
+
121
+ }
122
+
123
+ ```
124
+
125
+
126
+
27
127
  ```Python
28
128
 
29
129
  # 関数化したい。
@@ -136,7 +236,7 @@
136
236
 
137
237
  openpyxlのマニュアルなどを確認し、設定可能なパラメータを調査した。
138
238
 
139
-
239
+ jsonのパラメータについて検索して、パラメータを読み込もうとしてみた。
140
240
 
141
241
 
142
242
 

1

図を追加し、若干コードをリファクタリングした

2021/06/27 07:47

投稿

H.K2
H.K2

スコア88

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,15 @@
2
2
 
3
3
  pythonで、pandasなどで成形したdataframeを、excelに出力し、
4
4
 
5
- excelのグラフを作ろうとしています。
5
+ excelのグラフを作ろうとしています。(下記のようなイメージ)
6
6
 
7
+
8
+
9
+ ![イメージ説明](9ccd1fade9f603c5a94fe2a32fd2f900.png)
10
+
11
+
12
+
7
- 下記のようなコードを書いたのですが、これらのようなコードでは
13
+ 下記のようなコードを書いた(excel出力した後から処理)のですが、これらのようなコードでは
8
14
 
9
15
  拡張性がなく、またコードが再利用できないため、非常に保守性が悪いと感じます。
10
16
 
@@ -20,29 +26,17 @@
20
26
 
21
27
  ```Python
22
28
 
29
+ # 関数化したい。
30
+
23
31
  wb = load_workbook("test_reg_sample.xlsx")
24
32
 
25
33
 
26
34
 
27
35
  dt_s = s_row + 1 + 1
28
36
 
29
- #y,xデータの範囲を選択
37
+ list_xy = [[5,6], [5, 9], [5,10], [5,11]]
30
38
 
31
- y = Reference(wb["aaa"] ,min_col=2, max_col=2, min_row=dt_s-1, max_row=s_row+1+data_len)
32
-
33
- x = Reference(wb["aaa"] ,min_col=1, max_col=1, min_row=dt_s, max_row=s_row+1+data_len)
34
-
35
-
36
-
37
- #系列変数seriesをy,xを指定して定義する yのみ、ラベルを含むときは、title_from_data=Trueにする
38
-
39
- series = Series(y, x, title_from_data=True)
40
-
41
- #プロットをつなぐ線を消す
39
+ list_mark =
42
-
43
- series.graphicalProperties.line.noFill = True
44
-
45
-
46
40
 
47
41
  # グラフサイズ
48
42
 
@@ -70,41 +64,65 @@
70
64
 
71
65
  chart.x_axis.scaling.min = 0
72
66
 
73
- chart.x_axis.scaling.max = 80
67
+ chart.x_axis.scaling.max = 10
74
68
 
75
69
  chart.y_axis.scaling.min = 0
76
70
 
77
- chart.y_axis.scaling.max = 80
71
+ chart.y_axis.scaling.max = 20
78
72
 
79
- chart.x_axis.majorUnit = 20
73
+ chart.x_axis.majorUnit = 5
80
74
 
81
- chart.y_axis.majorUnit = 20
75
+ chart.y_axis.majorUnit = 5
82
76
 
83
77
 
84
78
 
85
- #散布図として定義したchartへデータを指定したseries変数を渡す
79
+ #y,xデータの範囲選択
86
80
 
87
- chart.series.append(series)
81
+ # todo:series, chartのパラメータは外だししたい。
82
+
83
+ for i, (c_x, c_y) in enumerate(list_xy):
84
+
85
+ print(i, c_x, c_y)
86
+
87
+ y = Reference(wb["aaa"] ,min_col=c_y, max_col=c_y, min_row=dt_s-1, max_row=s_row+1+data_len)
88
+
89
+ x = Reference(wb["aaa"] ,min_col=c_x, max_col=c_x, min_row=dt_s, max_row=s_row+1+data_len)
88
90
 
89
91
 
90
92
 
91
- #マーカー表示する(appendの前だとエラー出?)
93
+ #系列変数seriesy,xを指定して定義する。yのみラベルを含むときは、title_from_data=Trueにす
92
94
 
93
- series.marker.symbol = "auto"
95
+ series = Series(y, x, title_from_data=True)
94
96
 
95
- chart.series[0].marker.symbol = "circle"
97
+ #プロットをつなぐ線を消す
96
98
 
97
- chart.series[0].marker.size = 12
99
+ series.graphicalProperties.line.noFill = True
98
100
 
99
- chart.series[0].marker.graphicalProperties.solidFill = "FF0000"
100
101
 
102
+
103
+ #散布図として定義したchartへデータを指定したseries変数を渡す
104
+
105
+ chart.series.append(series)
106
+
107
+
108
+
109
+ #マーカーを表示する(todo:ここもパラメータ化予定)
110
+
111
+ series.marker.symbol = "circle"
112
+
113
+ chart.series[i].marker.symbol = "circle"
114
+
115
+ chart.series[i].marker.size = 12
116
+
117
+ chart.series[i].marker.graphicalProperties.solidFill = "FF0000"
118
+
101
- chart.series[0].marker.graphicalProperties.line.solidFill = "0000FF"
119
+ chart.series[i].marker.graphicalProperties.line.solidFill = "0000FF"
102
120
 
103
121
 
104
122
 
105
123
  #A6セルにグラフを表示
106
124
 
107
- wb["Sheet1"].add_chart(chart,"L10")
125
+ wb["aaa"].add_chart(chart,"L10")
108
126
 
109
127
  wb.save("test2.xlsx")
110
128