Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 385
Amelio Vazquez-Reina Avatar asked Aug 28 '13 23:08

Amelio Vazquez-Reina


People also ask

How do you make a boxplot horizontal in MatPlotLib?

Horizontal Box plots We can turn the boxplot into a horizontal boxplot by two methods first, we need to switch x and y attributes and pass it to the boxplot( ) method, and the other is to use the orient=”h” option and pass it to the boxplot() method.

Can box plots be horizontal?

Switching x and y. Notice how the orientation of the boxplot only depends on how you declare the numerical variable you expect to analyze. If set as the argument y, the boxplot will be vertical, and if set as x, it will be horizontal.

How do you make a vertical box plot in Python?

Python Pandas - Draw a vertical boxplot grouped by a categorical variable with Seaborn. Box Plot in Seaborn is used to draw a box plot to show distributions with respect to categories. To create a vertical Box Plot, use the seaborn. boxplot().


2 Answers

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

like image 187
unutbu Avatar answered Sep 16 '22 16:09

unutbu


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.

like image 31
MasterOne Piece Avatar answered Sep 19 '22 16:09

MasterOne Piece