Download scripts/plot_c1_c2_figures.py from KCBtheone/SplatAtlas: direct link, hf CLI and curl.
- Browser
- Download file 2.57 kB
-
https://huggingface.co/KCBtheone/SplatAtlas/resolve/main/scripts/plot_c1_c2_figures.py
- Command line
-
hf download hf://KCBtheone/SplatAtlas/scripts/plot_c1_c2_figures.py
-
curl -L -o plot_c1_c2_figures.py https://huggingface.co/KCBtheone/SplatAtlas/resolve/main/scripts/plot_c1_c2_figures.py
2.57 kB
| import pandas as pd | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| from pathlib import Path | |
| # 设置学术图表样式 | |
| plt.rcParams.update({'font.size': 12, 'pdf.fonttype': 42, 'ps.fonttype': 42}) | |
| sns.set_theme(style="whitegrid", context="paper") | |
| OUT_DIR = Path("/root/autodl-tmp/SplatAtlas/outputs/surfel_hypothesis_7tnt_all/") | |
| df_method = pd.read_csv(OUT_DIR / "method_mean_7tnt.csv") | |
| df_scene = pd.read_csv(OUT_DIR / "scene_mean_7tnt.csv") | |
| # 过滤掉 V3 为空的行(比如 2DGS) | |
| df_v3 = df_method.dropna(subset=['v3_normal_median_deg', 'center_pca_normal_median_deg']).copy() | |
| # ========================================== | |
| # Figure 1: V3 vs Center-PCA Scatter Plot | |
| # ========================================== | |
| plt.figure(figsize=(6, 5)) | |
| ax = sns.scatterplot( | |
| data=df_v3, x='center_pca_normal_median_deg', y='v3_normal_median_deg', | |
| hue='group', style='group', s=80, alpha=0.8, palette="deep" | |
| ) | |
| # 画 y=x 的对角线 | |
| lims = [10, 65] | |
| plt.plot(lims, lims, '--', color='gray', zorder=0) | |
| plt.fill_between(lims, lims, 70, color='red', alpha=0.05, zorder=0) # 上半区标红(V3更差) | |
| plt.fill_between(lims, 0, lims, color='green', alpha=0.05, zorder=0) # 下半区标绿(V3更好) | |
| plt.title("Covariance Orientation vs. Center PCA Normal") | |
| plt.xlabel("Center-PCA Normal Median Error (deg)") | |
| plt.ylabel("V3 Covariance Normal Median Error (deg)") | |
| plt.xlim(10, 65) | |
| plt.ylim(25, 70) | |
| plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', title="Method Group") | |
| plt.text(12, 60, "V3 is Worse", color='red', fontsize=12, fontweight='bold', alpha=0.5) | |
| plt.text(50, 30, "V3 is Better", color='green', fontsize=12, fontweight='bold', alpha=0.5) | |
| plt.tight_layout() | |
| plt.savefig(OUT_DIR / "Fig1_V3_vs_PCA_Scatter.pdf", bbox_inches='tight') | |
| print(f"✅ Saved Fig 1 to {OUT_DIR / 'Fig1_V3_vs_PCA_Scatter.pdf'}") | |
| # ========================================== | |
| # Figure 2: Surface Near Ratio by Scene Barplot | |
| # ========================================== | |
| plt.figure(figsize=(7, 4)) | |
| df_scene_sorted = df_scene.sort_values(by='surface_near_ratio', ascending=False) | |
| sns.barplot(data=df_scene_sorted, x='scene', y='surface_near_ratio', palette="viridis") | |
| plt.title("Proximity of Gaussian Centers to True Surface Across Scenes") | |
| plt.xlabel("Tanks & Temples Scene") | |
| plt.ylabel("Surface-Near Ratio ($< 2\\tau$)") | |
| plt.axhline(y=df_scene['surface_near_ratio'].mean(), color='r', linestyle='--', label='Global Mean') | |
| plt.legend() | |
| plt.tight_layout() | |
| plt.savefig(OUT_DIR / "Fig2_Surface_Proximity_Bar.pdf") | |
| print(f"✅ Saved Fig 2 to {OUT_DIR / 'Fig2_Surface_Proximity_Bar.pdf'}") | |