64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
"""
|
|
Plot styling for O-Prize grade figures
|
|
Ensures consistent, publication-quality appearance across all figures
|
|
"""
|
|
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib as mpl
|
|
from matplotlib import rcParams
|
|
|
|
def set_oprice_style():
|
|
"""Set global matplotlib style for O-Prize quality figures"""
|
|
|
|
rcParams['font.family'] = 'serif'
|
|
rcParams['font.serif'] = ['Times New Roman', 'DejaVu Serif']
|
|
rcParams['font.size'] = 10
|
|
rcParams['axes.labelsize'] = 11
|
|
rcParams['axes.titlesize'] = 12
|
|
rcParams['xtick.labelsize'] = 9
|
|
rcParams['ytick.labelsize'] = 9
|
|
rcParams['legend.fontsize'] = 9
|
|
rcParams['figure.titlesize'] = 13
|
|
|
|
# Line and marker settings
|
|
rcParams['lines.linewidth'] = 1.5
|
|
rcParams['lines.markersize'] = 4
|
|
rcParams['axes.linewidth'] = 0.8
|
|
rcParams['grid.linewidth'] = 0.5
|
|
rcParams['grid.alpha'] = 0.3
|
|
|
|
# Use constrained layout
|
|
rcParams['figure.constrained_layout.use'] = True
|
|
|
|
# Color cycle (professional color scheme)
|
|
mpl.rcParams['axes.prop_cycle'] = mpl.cycler(
|
|
color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728',
|
|
'#9467bd', '#8c564b', '#e377c2', '#7f7f7f']
|
|
)
|
|
|
|
def save_figure(fig, filepath_base, dpi=300):
|
|
"""
|
|
Save figure in both PDF and PNG formats
|
|
|
|
Args:
|
|
fig: matplotlib figure object
|
|
filepath_base: path without extension (e.g., 'figures/Fig01')
|
|
dpi: resolution for PNG output
|
|
"""
|
|
fig.savefig(f"{filepath_base}.pdf", dpi=dpi, bbox_inches='tight')
|
|
fig.savefig(f"{filepath_base}.png", dpi=dpi, bbox_inches='tight')
|
|
|
|
def get_color_palette():
|
|
"""Return standard color palette for consistent coloring"""
|
|
return {
|
|
'primary': '#1f77b4',
|
|
'secondary': '#ff7f0e',
|
|
'success': '#2ca02c',
|
|
'danger': '#d62728',
|
|
'info': '#17a2b8',
|
|
'warning': '#ffc107',
|
|
'dark': '#343a40',
|
|
'light': '#f8f9fa',
|
|
'grid': '#cccccc'
|
|
}
|