xls2ternary.py

目次

更新履歴

  • pandasを使うようにした。<2024-09-20 金>

はじめに

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]

figure

図1: 出力される図

1列目のデータ範囲の最小値を指定できます。1列目のデータを70-100%にする場合です。また、コンタープロットの補完をlinearにしてラベルをwt%にしてみます。

xls2ternary.py -xmin 70 --interp linear -xl wt% test.xlsx

figure

図2: 1列目のデータを70から100%に拡大した図

図をファイルとして保存したい場合は、画面のメニューから選んでも良いですが、-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)

著者: 大窪 貴洋 (千葉大院工) ohkubo.takahiro@faculty.chiba-u.jp

Created: 2024-09-20 金 17:05

Validate