質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

998閲覧

pythonで列ごとに散布図(直線)を表示させたい

umemaru

総合スコア2

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/12/20 11:36

前提

python初心者です。
Excelのデータを使って列ごとに散布図(直線)を表示させたいのですが、うまくできませんでした。。

実現したいこと

・列ごとに散布図(直線)を別シートに表示させたい
A列をy軸の基準値としてグラフを作成していきたいです。
イメージ説明

発生している問題・エラーメッセージ

列ごとにグラフを横に並べられない

該当のソースコード

python

1import openpyxl as op 2 3file_path="data.xlsx" 4wb = op.load_workbook(file_path) 5ws = wb["データ"] 6ws2 = wb["グラフ"] 7 8chart = op.chart.ScatterChart("marker") 9chart.x_axis.title = "ddd" 10chart.y_axis.title = "eee" 11 12MAX_row = ws.max_row 13MAX_column = ws.max_column 14 15data = op.chart.Reference(ws,min_col=2,min_row=1,max_row = MAX_row) 16time = op.chart.Reference(ws,min_col=1,min_row=2,max_row = MAX_row) 17series= op.chart.Series(data,time,title_from_data=True) 18series.graphicalProperties.line.noFill=False 19chart.Series.append(series) 20 21chart.y_axis.scaling.min=0 22chart.y_axis.scaling.max=0.60 23 24chart.x_axis.scaling.min=0.4 25chart.x_axis.scaling.max=0.5 26 27ws2.add_chart(chart,"B8") 28 29wb.save(file_path) 30

試したこと

for文でループのようにやるのかと思ったのですが、エクセルを開いたとき画像が表示できませんでしたと出てしまいました。

import openpyxl as op file_path="data.xlsx" wb = op.load_workbook(file_path) ws = wb["データ"] ws2 = wb["グラフ"] chart = op.chart.ScatterChart("marker") chart.x_axis.title = "ddd" chart.y_axis.title = "eee" MIN_row = ws.min_row MIN_column = ws.min_column MAX_row = ws.max_row MAX_column = ws.max_column time = op.chart.Reference(ws,min_col=MIN_column+1,min_row=MIN_row+1,max_row = MAX_row) for idx in range(MIN_column+2,Max_column+1): data = op.chart.Reference(ws,min_col=idx,min_row=MIN_row,max_row = MAX_row) series= op.chart.Series(data,time,title_from_data=True) series.graphicalProperties.line.noFill=False chart.Series.append(series) chart.y_axis.scaling.min=0 chart.y_axis.scaling.max=0.60 chart.x_axis.scaling.min=0.4 chart.x_axis.scaling.max=0.5 ws2.add_chart(chart,"B8") wb.save(file_path)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2022/12/20 13:51

> 列ごとにグラフを横に並べられない ではどのように表示されるのでしょうか?
umemaru

2022/12/20 14:20

質問ありがとうございます。 該当のソースコードのところではfor文はないので一個のグラフがでます。 試したことのところで列ごとにできると思ったのですが、エクセルファイルを開いた際に問題なく開くために図を削除しましたとでます。 実行した際のエラーが出ないため、質問させていただきました。
meg_

2022/12/20 16:44

> 列ごとに散布図 というのは、みかんのグラフ、りんごのグラフ・・・と作成したいということでしょうか? ”試したこと”のコードを見ると、1つのグラフにデータを追加しているように見えました。(それがエラーの原因かは分かりませんが)
umemaru

2022/12/20 23:24

meg_さんの解釈通りでございます。 みかんのグラフ、りんごのグラフというのを横に並べていきたいと考えてます。
meg_

2022/12/21 11:15 編集

「該当のソースコード」を試したところ下記エラーが発生しました。ご確認ください。 AttributeError: 'ScatterChart' object has no attribute 'Series'
umemaru

2023/01/10 12:00

返信遅くなってしまって申し訳ございません。 19行目のScatterChartの最初Sが小文字でないといけませんでした。 ご確認ありがとうございます。
guest

回答1

0

python

1import openpyxl as op 2 3file_path="data.xlsx" 4wb = op.load_workbook(file_path) 5ws = wb["データ"] 6ws2 = wb["グラフ"] 7 8col = 5 9for i in range(2, ws.max_column + 1): 10 chart = op.chart.ScatterChart("marker") 11 chart.x_axis.title = "ddd" 12 chart.y_axis.title = "eee" 13 14 MAX_row = ws.max_row 15 MAX_column = ws.max_column 16 17 data = op.chart.Reference(ws,min_col=i,min_row=1,max_row = MAX_row) 18 time = op.chart.Reference(ws,min_col=1,min_row=2,max_row = MAX_row) 19 series= op.chart.Series(data,time,title_from_data=True) 20 series.graphicalProperties.line.noFill=False 21 chart.series.append(series) 22 23 chart.y_axis.scaling.min=0 24 chart.y_axis.scaling.max=0.60 25 26 chart.x_axis.scaling.min=0.4 27 chart.x_axis.scaling.max=0.5 28 29 ws2.add_chart(chart,ws.cell(row=8,column=col).coordinate) 30 col = col + 10 31 32wb.save(file_path)

イメージ説明

イメージ説明

投稿2022/12/21 11:28

meg_

総合スコア10577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問