Auto-margins
Keeping the graph's margins and the axis representations in sync is a mess. Margins should default to null in graph props and maybe listen for axes showing in slots below to re-adjust the plot area when an axis announces how much room it needs?
Manually specifying margin should mean global margin around the auto-margined main chart.