7

Using Seaborn, I can create a . Making it vertical is no problem. But I would like to have a horizontal violin plot. I saw that it is advised to just switch x and y when passing parameters in the violinplot function.

I am looking to get the same violin plot, just rotated by 90 degrees and am not able to acheive this by just switching x and y. Here is a simple example:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
categories = pd.Series(['2008', '2008', '2008', '2009', '2009' ])
values     = pd.Series(np.random.normal(0,1, 5))
sns.violinplot( x=categories, y=values, linewidth=5)
plt.show()
sns.violinplot( y=categories, x=values, linewidth=5)
plt.show()

This two graphs. The first is the vertical violin plot, which is as expected. But the second one is not the analogous horizontal violin plot. What is wrong with the command calling the second plot?

enter image description here

splinter
  • 3,727
  • 8
  • 37
  • 82

2 Answers2

11

You can set the second plot to be horizontal by setting orient='h' in sns.violinplot this way:

sns.violinplot(y=categories, x=values, linewidth=5, orient='h')
plt.show()

enter image description here

For more details see the seaborn.violinplot documentation.

Mabel Villalba
  • 2,538
  • 8
  • 19
  • for some reason the `orient` option is not mentioned in the examples, although it is mentioned in the reference – vlsd May 04 '21 at 18:02
2

Try this:

sns.violinplot(y=categories, x=values, linewidth=5, orient='h')
NK_
  • 361
  • 1
  • 4
  • 11