Amelio Vazquez-Reina
Amelio Vazquez-Reina

Reputation: 96284

Horizontal box plots in matplotlib/Pandas

Bar plots:

matplotlib offers the function bar and barh to do vertical and horizontal bar plots.

Box plots:

matplotlib also offers the function boxplot to do vertical box plots.

And Pandas offers its own function for vertical box plots.

But is there any way in matplotlib or Pandas to get a horizontal box plot?

Upvotes: 44

Views: 89024

Answers (4)

Avinash Raut
Avinash Raut

Reputation: 2103

You can try with this example

import matplotlib.pyplot as plt

a = [10,20,30,40,50,60]
plt.xlabel("value")
plt.ylabel("value")

plt.boxplot(a,vert=False)
plt.show()

Upvotes: 0

Shariq Anwar
Shariq Anwar

Reputation: 111

matplotlib has a vert property which is set to True by default. Change it to False

plt.boxplot(df["feature"], vert=False)

Upvotes: 5

MasterOne Piece
MasterOne Piece

Reputation: 461

vert=False stands # for "no vertical"

Use by='categorical_feature name' to make box for every level plt.tight_layout() # kills any overlapping plots (not always) Matplotlib and Pandas are really easy when you master them and you can do powerful plots using them.

Upvotes: 9

unutbu
unutbu

Reputation: 879591

matplotlib's boxplot(..., vert=False) makes horizontal box plots. The keyword parameter vert=False can also be passed to DataFrame.boxplot:

import matplotlib.pyplot as plt
import pandas as pd
x = [[1.2, 2.3, 3.0, 4.5],
     [1.1, 2.2, 2.9, 5.0]]
df = pd.DataFrame(x, index=['Age of pregnant women', 'Age of pregnant men'])

df.T.boxplot(vert=False)
plt.subplots_adjust(left=0.25)
plt.show()

enter image description here

I see from the comment (below) that the motivation for making a horizontal box plot is that the labels are rather long. Another option in that case might be to rotate the xticklabels:

import matplotlib.pyplot as plt
import pandas as pd
x = [[1.2, 2.3, 3.0, 4.5],
     [1.1, 2.2, 2.9, 5.0]]
df = pd.DataFrame(x, index=['Age of pregnant women', 'Age of pregnant men'])

df.T.boxplot()
plt.subplots_adjust(bottom=0.25)
plt.xticks(rotation=25)
plt.show()

enter image description here

Upvotes: 86

Related Questions