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

質問編集履歴

7

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

2021/06/27 11:58

投稿

H.K2
H.K2

スコア88

title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,9 @@
8
8
  拡張性がなく、またコードが再利用できないため、非常に保守性が悪いと感じます。
9
9
  そのため、jsonなどのパラメータファイルにパラメータ部分を外出ししようと
10
10
  しているのですが、よい方法をご教示いただけないでしょうか。
11
+ 追記:ファイル形式はjsonにこだわらないので、ファイルから読み込んだデータに対して
12
+ 長々と代入文を書くのではなく、読み込んだデータをもとに、短い行数でパラメータを
13
+ 設定するような工夫ができないかをご質問したいという意図でした。文章が分かりにくく申し訳ありません。
11
14
 
12
15
  ~~追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、
13
16
  d = json.loads("graph_param.json")のように辞書で読み込もうとしたのですが、

6

誤記修正

2021/06/27 11:58

投稿

H.K2
H.K2

スコア88

title CHANGED
File without changes
body CHANGED
@@ -17,7 +17,7 @@
17
17
  ~~
18
18
  すみません。この件はご指摘いただき,下記で解決しました。(基礎的な文法ミスでした)
19
19
  import json
20
- with open('graph_param.json', encoding='cp932') as f:
20
+ with open('graph_param.json', encoding='utf-8') as f:
21
21
  dct = json.load(f)
22
22
 
23
23
 

5

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

2021/06/27 11:46

投稿

H.K2
H.K2

スコア88

title CHANGED
File without changes
body CHANGED
@@ -9,17 +9,19 @@
9
9
  そのため、jsonなどのパラメータファイルにパラメータ部分を外出ししようと
10
10
  しているのですが、よい方法をご教示いただけないでしょうか。
11
11
 
12
- 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、
12
+ ~~追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、
13
13
  d = json.loads("graph_param.json")のように辞書で読み込もうとしたのですが、
14
14
  JSONDecodeError: Expecting value: line 1 column 1 (char 0)となってしまいます。
15
- エラーメッセージを見る限り、1行目がおかしいのだと思うのですが、どこがおかしいのかがわからず、
16
- ご教示いただくことは可能でしょうか。
17
- ご指摘をいただいた内容、およびエラーコードから検索した下記のサイトを見る限り、文字コードが怪しいのかと思い、
18
- VSCodeで、エンコーディングをutf-8などに変更して保存しましたが、エラーは変化しませんでした。
19
-
20
15
  参考:
21
16
  https://sasuwo.org/python_reading_json_error/
17
+ ~~
18
+ すみません。この件はご指摘いただき,下記で解決しました。(基礎的な文法ミスでした)
19
+ import json
20
+ with open('graph_param.json', encoding='cp932') as f:
21
+ dct = json.load(f)
22
22
 
23
+
24
+
23
25
  ### 該当のソースコード
24
26
 
25
27
  ``` json(graph_param.json)

4

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

2021/06/27 11:44

投稿

H.K2
H.K2

スコア88

title CHANGED
File without changes
body CHANGED
@@ -9,7 +9,8 @@
9
9
  そのため、jsonなどのパラメータファイルにパラメータ部分を外出ししようと
10
10
  しているのですが、よい方法をご教示いただけないでしょうか。
11
11
 
12
- 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、load_jsonしたのですが、
12
+ 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、
13
+ d = json.loads("graph_param.json")のように辞書で読み込もうとしたのですが、
13
14
  JSONDecodeError: Expecting value: line 1 column 1 (char 0)となってしまいます。
14
15
  エラーメッセージを見る限り、1行目がおかしいのだと思うのですが、どこがおかしいのかがわからず、
15
16
  ご教示いただくことは可能でしょうか。
@@ -21,7 +22,7 @@
21
22
 
22
23
  ### 該当のソースコード
23
24
 
24
- ```json(graph_param.json)
25
+ ``` json(graph_param.json)
25
26
  {
26
27
  "chart_setting":{
27
28
  "style_val":2,

3

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

2021/06/27 11:27

投稿

H.K2
H.K2

スコア88

title CHANGED
File without changes
body CHANGED
@@ -13,7 +13,12 @@
13
13
  JSONDecodeError: Expecting value: line 1 column 1 (char 0)となってしまいます。
14
14
  エラーメッセージを見る限り、1行目がおかしいのだと思うのですが、どこがおかしいのかがわからず、
15
15
  ご教示いただくことは可能でしょうか。
16
+ ご指摘をいただいた内容、およびエラーコードから検索した下記のサイトを見る限り、文字コードが怪しいのかと思い、
17
+ VSCodeで、エンコーディングをutf-8などに変更して保存しましたが、エラーは変化しませんでした。
16
18
 
19
+ 参考:
20
+ https://sasuwo.org/python_reading_json_error/
21
+
17
22
  ### 該当のソースコード
18
23
 
19
24
  ```json(graph_param.json)
@@ -118,6 +123,7 @@
118
123
 
119
124
  openpyxlのマニュアルなどを確認し、設定可能なパラメータを調査した。
120
125
  jsonのパラメータについて検索して、パラメータを読み込もうとしてみた。
126
+ エラーコードから検索したサイトを調べ、ファイルの文字コードなどを変更してみた。
121
127
 
122
128
  ### 補足情報(FW/ツールのバージョンなど)
123
129
 

2

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

2021/06/27 11:25

投稿

H.K2
H.K2

スコア88

title CHANGED
File without changes
body CHANGED
@@ -9,8 +9,58 @@
9
9
  そのため、jsonなどのパラメータファイルにパラメータ部分を外出ししようと
10
10
  しているのですが、よい方法をご教示いただけないでしょうか。
11
11
 
12
+ 追記:なお、パラメータをjsonに持たせようと思い、下記jsonファイルを作って、load_jsonしたのですが、
13
+ JSONDecodeError: Expecting value: line 1 column 1 (char 0)となってしまいます。
14
+ エラーメッセージを見る限り、1行目がおかしいのだと思うのですが、どこがおかしいのかがわからず、
15
+ ご教示いただくことは可能でしょうか。
16
+
12
17
  ### 該当のソースコード
13
18
 
19
+ ```json(graph_param.json)
20
+ {
21
+ "chart_setting":{
22
+ "style_val":2,
23
+ "height":12,
24
+ "width":12,
25
+ "title":"test_散布図",
26
+ "x_axis_title":"x座標",
27
+ "y_axis_title":"y座標"
28
+ },
29
+ "marker1_setting":{
30
+ "read_x_col":5,
31
+ "read_y_col":6,
32
+ "mark_symbol":"circle",
33
+ "mark_size":12,
34
+ "solidFill":"FF0000",
35
+ "line_solidFill":"0000FF"
36
+ },
37
+ "marker2_setting":{
38
+ "read_x_col":5,
39
+ "read_y_col":9,
40
+ "mark_symbol":"regtangle",
41
+ "mark_size":10,
42
+ "solidFill":"FFFF00",
43
+ "line_solidFill":"00FFFF"
44
+ },
45
+ "marker3_setting":{
46
+ "read_x_col":5,
47
+ "read_y_col":10,
48
+ "mark_symbol":"circle",
49
+ "mark_size":8,
50
+ "solidFill":"FF00FF",
51
+ "line_solidFill":"FF00FF"
52
+ },
53
+ "marker4_setting":{
54
+ "read_x_col":5,
55
+ "read_y_col":11,
56
+ "mark_symbol":"regtangle",
57
+ "mark_size":6,
58
+ "solidFill":"FFF0FF",
59
+ "line_solidFill":"FFF0FF"
60
+ }
61
+ }
62
+ ```
63
+
14
64
  ```Python
15
65
  # 関数化したい。
16
66
  wb = load_workbook("test_reg_sample.xlsx")
@@ -67,8 +117,8 @@
67
117
  ### 試したこと
68
118
 
69
119
  openpyxlのマニュアルなどを確認し、設定可能なパラメータを調査した。
120
+ jsonのパラメータについて検索して、パラメータを読み込もうとしてみた。
70
121
 
71
-
72
122
  ### 補足情報(FW/ツールのバージョンなど)
73
123
 
74
124
  ここにより詳細な情報を記載してください。

1

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

2021/06/27 07:47

投稿

H.K2
H.K2

スコア88

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,10 @@
1
1
  ### 前提・実現したいこと
2
2
  pythonで、pandasなどで成形したdataframeを、excelに出力し、
3
- excelのグラフを作ろうとしています。
3
+ excelのグラフを作ろうとしています。(下記のようなイメージ)
4
+
5
+ ![イメージ説明](9ccd1fade9f603c5a94fe2a32fd2f900.png)
6
+
4
- 下記のようなコードを書いたのですが、これらのようなコードでは
7
+ 下記のようなコードを書いた(excel出力した後から処理)のですが、これらのようなコードでは
5
8
  拡張性がなく、またコードが再利用できないため、非常に保守性が悪いと感じます。
6
9
  そのため、jsonなどのパラメータファイルにパラメータ部分を外出ししようと
7
10
  しているのですが、よい方法をご教示いただけないでしょうか。
@@ -9,18 +12,12 @@
9
12
  ### 該当のソースコード
10
13
 
11
14
  ```Python
15
+ # 関数化したい。
12
16
  wb = load_workbook("test_reg_sample.xlsx")
13
17
 
14
18
  dt_s = s_row + 1 + 1
15
- #y,xデータの範囲を選択
16
- y = Reference(wb["aaa"] ,min_col=2, max_col=2, min_row=dt_s-1, max_row=s_row+1+data_len)
17
- x = Reference(wb["aaa"] ,min_col=1, max_col=1, min_row=dt_s, max_row=s_row+1+data_len)
18
-
19
- #系列変数seriesをy,xを指定して定義する yのみ、ラベルを含むときは、title_from_data=Trueにする
20
- series = Series(y, x, title_from_data=True)
19
+ list_xy = [[5,6], [5, 9], [5,10], [5,11]]
21
- #プロットをつなぐ線を消す
20
+ list_mark =
22
- series.graphicalProperties.line.noFill = True
23
-
24
21
  # グラフサイズ
25
22
  chart = ScatterChart()
26
23
  chart.style = style_val
@@ -34,24 +31,36 @@
34
31
 
35
32
  # 軸の表示範囲と目盛り間隔
36
33
  chart.x_axis.scaling.min = 0
37
- chart.x_axis.scaling.max = 80
34
+ chart.x_axis.scaling.max = 10
38
35
  chart.y_axis.scaling.min = 0
39
- chart.y_axis.scaling.max = 80
36
+ chart.y_axis.scaling.max = 20
40
- chart.x_axis.majorUnit = 20
37
+ chart.x_axis.majorUnit = 5
41
- chart.y_axis.majorUnit = 20
38
+ chart.y_axis.majorUnit = 5
42
39
 
43
- #散布図として定義したchartへデータを指定したseries変数を渡す
40
+ #y,xデータの範囲選択
44
- chart.series.append(series)
41
+ # todo:series, chartのパラメータは外だししたい。
42
+ for i, (c_x, c_y) in enumerate(list_xy):
43
+ print(i, c_x, c_y)
44
+ y = Reference(wb["aaa"] ,min_col=c_y, max_col=c_y, min_row=dt_s-1, max_row=s_row+1+data_len)
45
+ x = Reference(wb["aaa"] ,min_col=c_x, max_col=c_x, min_row=dt_s, max_row=s_row+1+data_len)
45
46
 
46
- #マーカー表示する(append前だとエー出?)
47
+ #系列変数seriesy,xを指定して定義する。yベルを含むときは、title_from_data=Trueにす
47
- series.marker.symbol = "auto"
48
+ series = Series(y, x, title_from_data=True)
48
- chart.series[0].marker.symbol = "circle"
49
- chart.series[0].marker.size = 12
49
+ #プロットをつなぐ線を消す
50
- chart.series[0].marker.graphicalProperties.solidFill = "FF0000"
51
- chart.series[0].marker.graphicalProperties.line.solidFill = "0000FF"
50
+ series.graphicalProperties.line.noFill = True
52
51
 
52
+ #散布図として定義したchartへデータを指定したseries変数を渡す
53
+ chart.series.append(series)
54
+
55
+ #マーカーを表示する(todo:ここもパラメータ化予定)
56
+ series.marker.symbol = "circle"
57
+ chart.series[i].marker.symbol = "circle"
58
+ chart.series[i].marker.size = 12
59
+ chart.series[i].marker.graphicalProperties.solidFill = "FF0000"
60
+ chart.series[i].marker.graphicalProperties.line.solidFill = "0000FF"
61
+
53
62
  #A6セルにグラフを表示
54
- wb["Sheet1"].add_chart(chart,"L10")
63
+ wb["aaa"].add_chart(chart,"L10")
55
64
  wb.save("test2.xlsx")
56
65
  ```
57
66