Spaces:
Sleeping
Sleeping
| import os | |
| import tempfile | |
| import shutil | |
| import gradio as gr | |
| import matplotlib.cm as cm | |
| import pandas as pd | |
| import japanize_matplotlib | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| def all_likelihood_plot(csv_file_name, tmpdir): | |
| df = pd.read_csv(csv_file_name, header=[1, 2]) | |
| df = df.drop(df.columns[[0]], axis=1) | |
| columns = df.columns.droplevel(1) | |
| # 重複を削除 | |
| columns = columns.drop_duplicates() | |
| likelihood = [df[x]["likelihood"] for x in columns] | |
| a = pd.DataFrame(likelihood, index=columns).T | |
| #平均値を求める | |
| point_average = a.mean() | |
| parts = ["指節1", "指節2", "指節3", "指節4", "指節5", "指節6", "指節7", "指節8", "指節9", | |
| "指節10", "指節11", "指節12", "指節13", "指節14", "触角(左)", "触角(右)", "頭部", "腹尾節"] | |
| # カラーマップの設定 | |
| a.columns = parts | |
| cmap = plt.get_cmap('rainbow') | |
| # バイオリン図のプロット | |
| sns.set(style="whitegrid",font="IPAexGothic") | |
| fig, ax = plt.subplots() | |
| # データをバイオリンプロットで描画 | |
| sns.violinplot(data=a, palette=[cmap(i) | |
| for i in np.linspace(0, 1, len(columns))], ax=ax,inner=None) | |
| # 横軸のラベルを重ならないように | |
| plt.xticks(rotation=65) | |
| ax.set_title('付属肢別の尤度') | |
| ax.set_xlabel('付属肢') | |
| ax.set_ylabel('尤度') | |
| #それぞれの要素の平均値をプロット | |
| plt.scatter(x=parts, y=point_average, color='black', marker='x') | |
| # 最大値を1に | |
| plt.ylim(0, 1) | |
| # fig.set_figwidth(10) | |
| #ラベルがはみ出ないように | |
| plt.tight_layout() | |
| # グラフを表示 | |
| plt.savefig(f"likelihood.png", dpi=300) | |
| def main(csv_file): | |
| with tempfile.TemporaryDirectory(dir=".") as tmpdir: | |
| all_likelihood_plot(csv_file, tmpdir) | |
| return f"likelihood.png" | |
| iface = gr.Interface(fn=main, inputs="file", | |
| outputs="image", title="尤度のグラフを作成します。") | |
| iface.launch() | |