You can go up to three. Matplotlib can do it. Obviously you can’t see in anything higher. There are several dimensional reduction techniques used for data viz, like PCA, LLE, t-SNE, etc., all that have downsides stemming from the fact that the task is not well determined. Roughly what you want is that close points in high-dim stay close in the projection, and vice-versa for far-away points. This is what t-SNE does, but is randomized and returns different results given seed.