using abstract XYChart to make chart component implementation easily replaceable