I'm partial to plotnine (
https://github.com/has2k1/plotnine). It is an implementation of grammar of graphics in python (like ggplot2).
It provides a stateless layer like interface which feels intuitive, and avoids bugs due to global state.
But, it is built on top of matplotlib. So, if plotnine cannot do something, you can go back to the matplotlib way of doing things and take advantage of the large number of blogs, example, tutorials, and stackoverflow answers.
Performance wise, it can handle more data than altair. But less than matplotlib, if you use the built in data manipulation features.