ridgeplot icon indicating copy to clipboard operation
ridgeplot copied to clipboard

Invert the plot axis

Open gioxc88 opened this issue 10 months ago • 9 comments

Hi, Thanks for this great package.

Is it possible to do in a way such that the density is on the y axis and the labels are on the x axis ?

That would pair well with time series plots Thanks

gioxc88 avatar Jan 30 '25 22:01 gioxc88

Thank you for submitting your first issue with us! 🎉

Our response times may vary, but we'll get back to you as soon as we can!

Welcome aboard! 🚀

github-actions[bot] avatar Jan 30 '25 22:01 github-actions[bot]

Hey, Glad you're finding it useful!

I've thought about this before but never got around to seeing how easy/complex it would be to implement. The problem with such features is that they can significantly increase the complexity of the project while not adding value to most users. That said, I'll try to take a look at it. (let me know if you're interested in contributing btw)

To be sure we're talking about the same thing, this is what your mean, right? Image

If not, please share some examples.

tpvasconcelos avatar Jan 31 '25 00:01 tpvasconcelos

A lot of people have shows interest (myself include) in using this package for representing probabilistic forecasts. Perhaps more users would find this feature helpful for this reason.

I was also thinking about adding some helper functionality to display some summary statistics such as tracking quantiles or mean. Something similar to the following plot (although I'm not sure which statistic they're plotting here 🤔):

Image

tpvasconcelos avatar Jan 31 '25 00:01 tpvasconcelos

Hey, Glad you're finding it useful!

I've thought about this before but never got around to seeing how easy/complex it would be to implement. The problem with such features is that they can significantly increase the complexity of the project while not adding value to most users. That said, I'll try to take a look at it. (let me know if you're interested in contributing btw)

To be sure we're talking about the same thing, this is what your mean, right? Image

If not, please share some examples.

Thanks a lot for the reply! Yes this is exactly what I am talking about.

I think I managed to do it by passing the data as y= instead of x= to the go.Violin and then doing a fig.update_traces(orientation='v')

I didn't play around with spacing yet (making the various densities overlap which looks better)

I think this would be a great feature to add and also regarding your second point (adding mean and maybe +/- std) that would be also useful (I am doing it myself externally anyway) because I want to visually keep track of the mean shift over time.

Thanks a lot !

gioxc88 avatar Jan 31 '25 04:01 gioxc88

I think this would be a great feature to add and also regarding your second point (adding mean and maybe +/- std) that would be also useful (I am doing it myself externally anyway) because I want to visually keep track of the mean shift over time.

Could you share an example plot from your implementation? It could be a nice reference for me to use when implementing it on this project. If you're using this for work, feel free too use some dummy data instead ofc 👍

tpvasconcelos avatar Feb 01 '25 21:02 tpvasconcelos

I think I managed to do it by passing the data as y= instead of x= to the go.Violin and then doing a fig.update_traces(orientation='v')

Yes indeed that is also an option, although less configurable. Did you also have to set a side option (e.g. side="positive") somewhere to get Plotly to plot only half of the violin's KDE?

tpvasconcelos avatar Feb 01 '25 21:02 tpvasconcelos

import plotly.graph_objects as go
from plotly.colors import n_colors
import numpy as np

n_scen = 100
time_steps = 4
data = np.random.normal(size=(time_steps, n_scen))

colors = n_colors('rgb(5, 200, 200)', 'rgb(200, 10, 10)', data.shape[0], colortype='rgb')
fig = go.Figure()
for data_line, color in zip(data, colors):
      fig.add_trace(go.Violin(y=data_line, line_color=color))

fig.update_traces(orientation='v', side='positive', width=1, points=False)
fig.update_layout(xaxis_showgrid=False, xaxis_zeroline=False)
Image

gioxc88 avatar Feb 03 '25 13:02 gioxc88

@gioxc88 Many thanks! (FYI: I updated your comment to include the graph output, which can be useful for other users looking for a similar solution)

tpvasconcelos avatar Feb 03 '25 17:02 tpvasconcelos

For reference, I'm not against this feature. I think it could be a really nice addition to the project. I'm only wary of the complexity this would add to the codebase. One thing to consider here is that we also support plotting histograms (or, more generically, bar charts) instead of KDE/area plots. Actually, we support using both trace types on the same figure. This would need to be considered when implementing this feature.

If someone wants to work on this, I'm open to review proposals and pull-requests 👍

tpvasconcelos avatar Feb 03 '25 17:02 tpvasconcelos