"""Run: python matplotlib_demo.py --output results; requires numpy, matplotlib."""
from pathlib import Path
import argparse
import numpy as np
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

def main():
    p=argparse.ArgumentParser();p.add_argument('--output',type=Path,default=Path('results'));args=p.parse_args();args.output.mkdir(parents=True,exist_ok=True)
    x=np.arange(1,7);y=np.array([60,65,63,75,80,85])
    fig,axs=plt.subplots(2,2,figsize=(9,6),layout='constrained')
    axs[0,0].plot(x,y,marker='o',label='Score');axs[0,0].set(title='Line: ordered observations',xlabel='Week',ylabel='Score');axs[0,0].legend();axs[0,0].set_ylim(0,100)
    axs[0,1].bar(['A','B'],[85,70],color=['#1688b8','#8574d5']);axs[0,1].set(title='Bar: category comparison',ylabel='Mean score');axs[0,1].set_ylim(0,100)
    axs[1,0].scatter(x,y,color='#1688b8');axs[1,0].set(title='Scatter: paired values',xlabel='Week',ylabel='Score');axs[1,0].set_ylim(0,100)
    axs[1,1].hist(y,bins=[50,60,70,80,90,100],color='#1688b8',edgecolor='white');axs[1,1].set(title='Histogram: distribution',xlabel='Score interval',ylabel='Count')
    fig.suptitle('Four views of a small synthetic dataset')
    fig.savefig(args.output/'matplotlib-gallery.png',dpi=160);plt.close(fig)
    fig,axs=plt.subplots(1,2,figsize=(8,3.5),layout='constrained')
    for ax,limit,title in zip(axs,[(0,100),(79,87)],['Zero baseline','Truncated axis (exaggerated)']):
        ax.bar(['A','B'],[82,85],color=['#1688b8','#8574d5']);ax.set_ylim(*limit);ax.set_title(title);ax.set_ylabel('Mean score')
    fig.savefig(args.output/'matplotlib-axis.png',dpi=160);plt.close(fig)
    print('Saved matplotlib-gallery.png and matplotlib-axis.png; all figures closed.')
if __name__=='__main__':main()
