xls2ternary.py
更新履歴
- pandasを使うようにした。
はじめに
Excelファイルから三成分系の相図をプロットするプログラムです。3成分系でガラス化範囲をプロットするために作成しました。いくつか3元プロットのライブラリが公開(python-ternary や Veusz )されているようですが、どれもイマイチ融通が効かないため、結局自作しました。
3成分の組成とガラス化の有無(0から1で判定)のデータから、相図を作成しコンタープロットを描きます。excelでファイルを作成し、引数でプログラムに渡します。3組成のそれぞれの成分名は、ファイル中のヘッダで指定します。入力するexcelファイルは、(test.xlsx)を参考にしてください。3行目がヘッダデータ、3組成の成分比とガラス化の有無G/C(0から1の範囲)を列としたデータを作成します。
成分名については、latex形式で上付き下付きも指定できます。以下はB2O3の例です。
${\rm B_{2}O_{3}}$
※G/Cの列が空欄の場合、データはスキップされプロットされません。
プログラムのインストール
プログラムはpython3.xで作成しているのでpython3.xを実行できる環境が必要です。matplotlibは2.0.2です。プログラム本体はxls2ternary.pyです。 python3.xをminicondaを使ってインストールしてください。numpy, matplotlib, pandasに加えてExcelファイルを読み込むためのopenpyxlが必要です。minicondaのインストールが完了したら以下のコマンドで必要なライブラリをインストールしてください。
conda install numpy matplotlib pandas openpyxl
後は、パスの通ったところに xls2ternary.py を配置すればインストールは完了です。
プログラムの実行
引数でexcelファイルを指定して実行します。テストデータ(test.xlsx)を試しにプロットしてみます。
xls2ternary.py test.xlsx
次のような内容がターミナルに表示され、mol%で表示された図が得られれば正しくプログラムは動いています。
Number of data : 59 Plot header [row]: ['A' 'B' 'C'] [1, 2, 3] G/C data [row]: G/C [4]
1列目のデータ範囲の最小値を指定できます。1列目のデータを70-100%にする場合です。また、コンタープロットの補完をlinearにしてラベルをwt%にしてみます。
xls2ternary.py -xmin 70 --interp linear -xl wt% test.xlsx
図をファイルとして保存したい場合は、画面のメニューから選んでも良いですが、-oで保存もできます。またexcelファイル中のヘッダーの行番号やデータの列番号をオプションで指定できます。 -hで指定できるオプション一覧が表示されます。以下、オプションについてもう少し説明します。
オプション | 内容 | default |
---|---|---|
-h | ヘルプを表します。 | |
-si | xlsファイル中のシート番号(0からはじまる)を指定します。 | 0 |
-hl | xlsファイル中のヘッダが入っている行番号を指定します。 | 3 |
-m | 組成データを含む3つの列番号を指定します。 | 1 2 3 |
-p | ガラス率(0から1の範囲)のデータを含む列を指定します。 | 4 |
-xmin | 1列目のデータをxminから100の範囲に変更します。 | 0 |
-o | 図を保存するファイル名前指定します。拡張子(pdfやpng等)で保存形式を自動判別します。 | None |
-xl | 図の下のラベルを指定します。 | mol% |
-g | コンタープロットのために内挿するグリッドの数です。 | 400 |
-fs | 保存する図の大きさです。 | 8 |
-ls | 頂点のラベルのフォントの大きさです。 | 16 |
-ts | 目盛の数字のフォントの大きさです。 | 12 |
–labeloffset | 頂点のラベルの位置のオフセット位置です。 | 2 |
–tickoffset | 目盛の数字の位置のオフセット位置です。 | 1 |
–colormap | コンタープロットのカラーマップです。ここ から好きなものを選べます。 | bwr |
–interp | コンタープロットする時の補完の方法です。[linear, cubic, nearest]から選択 。 | linear |
–nolegend | 凡例を表示しません。 | |
–nocontour | コンタープロットを表示しません。 | |
–nocolorbar | カラーバーを表示しません。 |
座標ピックアップ
表示された図中でマウスのボタン(左、中、右どれでも)をクリックすれば、3 成分の割合が以下のようにターミナルに表示されます。
button=1 ['B' 'C' 'A']=(24.52 51.03 24.45) button=1 ['B' 'C' 'A']=(24.49 44.60 30.91) button=1 ['B' 'C' 'A']=(45.65 26.83 27.53)