質問編集履歴
7
質問したい内容について追記
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
誤記修正
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='
|
39
|
+
with open('graph_param.json', encoding='utf-8') as f:
|
40
40
|
|
41
41
|
dct = json.load(f)
|
42
42
|
|
5
解決した部分の内容について追記
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
読み込み処理が不明確な記載だったので修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -20,7 +20,9 @@
|
|
20
20
|
|
21
21
|
|
22
22
|
|
23
|
-
追記:なお、パラメータをjsonに持たせようと思い、下記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
ファイルの文字コードについて明記しました。
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ファイルの読み込みエラーが出ることについて追記した。
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
図を追加し、若干コードをリファクタリングした
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
|
-
|
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 =
|
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 =
|
71
|
+
chart.y_axis.scaling.max = 20
|
78
72
|
|
79
|
-
chart.x_axis.majorUnit =
|
73
|
+
chart.x_axis.majorUnit = 5
|
80
74
|
|
81
|
-
chart.y_axis.majorUnit =
|
75
|
+
chart.y_axis.majorUnit = 5
|
82
76
|
|
83
77
|
|
84
78
|
|
85
|
-
#
|
79
|
+
#y,xデータの範囲を選択
|
86
80
|
|
87
|
-
|
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
|
-
#
|
93
|
+
#系列変数seriesをy,xを指定して定義する。yのみラベルを含むときは、title_from_data=Trueにする
|
92
94
|
|
93
|
-
series
|
95
|
+
series = Series(y, x, title_from_data=True)
|
94
96
|
|
95
|
-
|
97
|
+
#プロットをつなぐ線を消す
|
96
98
|
|
97
|
-
|
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[
|
119
|
+
chart.series[i].marker.graphicalProperties.line.solidFill = "0000FF"
|
102
120
|
|
103
121
|
|
104
122
|
|
105
123
|
#A6セルにグラフを表示
|
106
124
|
|
107
|
-
wb["
|
125
|
+
wb["aaa"].add_chart(chart,"L10")
|
108
126
|
|
109
127
|
wb.save("test2.xlsx")
|
110
128
|
|