質問編集履歴
7
質問したい内容について追記
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
誤記修正
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='
|
20
|
+
with open('graph_param.json', encoding='utf-8') as f:
|
21
21
|
dct = json.load(f)
|
22
22
|
|
23
23
|
|
5
解決した部分の内容について追記
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
読み込み処理が不明確な記載だったので修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,7 +9,8 @@
|
|
9
9
|
そのため、jsonなどのパラメータファイルにパラメータ部分を外出ししようと
|
10
10
|
しているのですが、よい方法をご教示いただけないでしょうか。
|
11
11
|
|
12
|
-
追記:なお、パラメータをjsonに持たせようと思い、下記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
ファイルの文字コードについて明記しました。
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ファイルの読み込みエラーが出ることについて追記した。
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
図を追加し、若干コードをリファクタリングした
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
|
+

|
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
|
-
|
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 =
|
34
|
+
chart.x_axis.scaling.max = 10
|
38
35
|
chart.y_axis.scaling.min = 0
|
39
|
-
chart.y_axis.scaling.max =
|
36
|
+
chart.y_axis.scaling.max = 20
|
40
|
-
chart.x_axis.majorUnit =
|
37
|
+
chart.x_axis.majorUnit = 5
|
41
|
-
chart.y_axis.majorUnit =
|
38
|
+
chart.y_axis.majorUnit = 5
|
42
39
|
|
43
|
-
#
|
40
|
+
#y,xデータの範囲を選択
|
44
|
-
|
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
|
-
#
|
47
|
+
#系列変数seriesをy,xを指定して定義する。yのみラベルを含むときは、title_from_data=Trueにする
|
47
|
-
series
|
48
|
+
series = Series(y, x, title_from_data=True)
|
48
|
-
chart.series[0].marker.symbol = "circle"
|
49
|
-
|
49
|
+
#プロットをつなぐ線を消す
|
50
|
-
chart.series[0].marker.graphicalProperties.solidFill = "FF0000"
|
51
|
-
|
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["
|
63
|
+
wb["aaa"].add_chart(chart,"L10")
|
55
64
|
wb.save("test2.xlsx")
|
56
65
|
```
|
57
66
|
|