#xlwingsでのグラフ作成
こんにちは、Cremokoroahです。
xlwingsでGraphを作成する際、散布図を作成したかったのに"Scatter"と指定しても散布図にならなかったので、chart_type(グラフの種類)の共有をしたいと思います。
※xlwingsのバージョンは0.15.1です
とりあえず、Jupyterで以下を実行すると画像のようにExcelのセルに乱数とグラフが作成されます。
コードは公式の例を参考にしております。
https://docs.xlwings.org/en/stable/api.html
import xlwings as xw
import numpy as np
sht = xw.Book().sheets[0]
rand_num = np.random.randn(15, 2)
sht.range('A1').value = rand_num
chart = sht.charts.add()
chart.set_source_data(sht.range('A1').expand())
#グラフの種類を指定したい
先ほど添付した公式のコードを眺めると、どうやらグラフの種類を指定できるようです。Jupyterで以下のコードを実行してみます。
chart.chart_type = 'line'
ですが、私がしたいことは散布図です。
ためしに、
chart.chart_type = 'Scatter'
とやってみました。
折れ線がlineならScatterいけるだろと思うとKey errorが返されました。
エラーを確認すると、
/anaconda3/lib/python3.6/site-packages/xlwings/xlmac.py(Windowsならxlwin.pyだったと思う)にはscatterなんてありません的なことを言われましたので、思い切ってxlmac.pyの中身を開いて、コマンドFで検索したところchart_typeの一覧がありました。散布図は'xy_scatter'とのことです。
公式で一覧を書いてくれてもいいと思うのに...
とりあえず一覧を貼っておきます。
'3d_area': -4098,
'3d_area_stacked': 78,
'3d_area_stacked_100': 79,
'3d_bar_clustered': 60,
'3d_bar_stacked': 61,
'3d_bar_stacked_100': 62,
'3d_column': -4100,
'3d_column_clustered': 54,
'3d_column_stacked': 55,
'3d_column_stacked_100': 56,
'3d_line': -4101,
'3d_pie': -4102,
'3d_pie_exploded': 70,
'area': 1,
'area_stacked': 76,
'area_stacked_100': 77,
'bar_clustered': 57,
'bar_of_pie': 71,
'bar_stacked': 58,
'bar_stacked_100': 59,
'bubble': 15,
'bubble_3d_effect': 87,
'column_clustered': 51,
'column_stacked': 52,
'column_stacked_100': 53,
'cone_bar_clustered': 102,
'cone_bar_stacked': 103,
'cone_bar_stacked_100': 104,
'cone_col': 105,
'cone_col_clustered': 99,
'cone_col_stacked': 100,
'cone_col_stacked_100': 101,
'cylinder_bar_clustered': 95,
'cylinder_bar_stacked': 96,
'cylinder_bar_stacked_100': 97,
'cylinder_col': 98,
'cylinder_col_clustered': 92,
'cylinder_col_stacked': 93,
'cylinder_col_stacked_100': 94,
'doughnut': -4120,
'doughnut_exploded': 80,
'line': 4,
'line_markers': 65,
'line_markers_stacked': 66,
'line_markers_stacked_100': 67,
'line_stacked': 63,
'line_stacked_100': 64,
'pie': 5,
'pie_exploded': 69,
'pie_of_pie': 68,
'pyramid_bar_clustered': 109,
'pyramid_bar_stacked': 110,
'pyramid_bar_stacked_100': 111,
'pyramid_col': 112,
'pyramid_col_clustered': 106,
'pyramid_col_stacked': 107,
'pyramid_col_stacked_100': 108,
'radar': -4151,
'radar_filled': 82,
'radar_markers': 81,
'stock_hlc': 88,
'stock_ohlc': 89,
'stock_vhlc': 90,
'stock_vohlc': 91,
'surface': 83,
'surface_top_view': 85,
'surface_top_view_wireframe': 86,
'surface_wireframe': 84,
'xy_scatter': -4169,
'xy_scatter_lines': 74,
'xy_scatter_lines_no_markers': 75,
'xy_scatter_smooth': 72,
'xy_scatter_smooth_no_markers': 73
数字の意味は私にはよくわかりませんがこれが一覧みたいです。
#最後に
私は機械設計エンジニアなのですが、社内で使用しているマクロに不満がありました。今更VBAは覚えたくないので色々調べたところ、なんとPythonにはxlwingsなるものがあることを最近知ったので共有させていただきました。
おそらく、私と同じように不満がありつつも既存のマクロを使用しているノンプログラマの方は多いと思います。今からVBAを覚えるのも悪くないと思いますが、どうせなら汎用性の高いプログラミング言語であるPythonを覚えつつ、業務効率化を狙ってみるのはいかがでしょうか??
今後、育児の合間をぬってノンプログラマ向けのxlwings記事を投稿していく予定です。
よろしくお願いします。