0

I have two pandas series of numbers (not necessarily in the same size). Can I create one side by side box plot for both of the series?

I didn't found a way to create a boxplot from a series, and not from 2 series.

3 Answers 3

1

For the test I generated 2 Series, of different size:

np.random.seed(0) s1 = pd.Series(np.random.randn(10)) s2 = pd.Series(np.random.randn(14)) 

The first processing step is to concatenate them into a single DataFrame and set some meaningful column names (will be included in the picture):

df = pd.concat([s1, s2], axis=1) df.columns = ['A', 'B'] 

And to create the picture, along with a title, you can run:

ax = df.boxplot() ax.get_figure().suptitle(t='My Boxplot', fontsize=16); 

For my source data, the result is:

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

1

We can try with an example dataset, two series, unequal length, and defined colors.

import numpy as np import pandas as pd import matplotlib.pyplot as plt np.random.seed(100) S1 = pd.Series(np.random.normal(0,1,10)) S2 = pd.Series(np.random.normal(0,1,14)) colors = ['#aacfcf', '#d291bc'] 

One option is to make a data.frame containing the two series in a column, and provide a label for the series:

fig, ax = plt.subplots(1, 1,figsize=(6,4)) import seaborn as sns sns.boxplot(x='series',y='values', data=pd.DataFrame({'values':pd.concat([S1,S2],axis=0), 'series':np.repeat(["S1","S2"],[len(S1),len(S2)])}), ax = ax,palette=colors,width=0.5 ) 

enter image description here

The other, is to use matplotlib directly, as the other solutions have suggested. However, there is no need to concat them column wise and create some amounts of NAs. You can directly use plt.boxplot from matplotlib to plot an array of values. The downside is, that it takes a bit of effort to adjust the colors etc, as I show below:

fig, ax = plt.subplots(1, 1,figsize=(6,4)) bplot = ax.boxplot([S1,S2],patch_artist=True,widths=0.5, medianprops=dict(color="black"),labels =['S1','S2']) plt.setp(bplot['boxes'], color='black') for patch, color in zip(bplot['boxes'], colors): patch.set_facecolor(color) 

enter image description here

Comments

0

Try this:

import numpy as np ser1 = pd.Series(np.random.randn(10)) ser2 = pd.Series(np.random.randn(10)) ## solution pd.concat([ser1, ser2], axis=1).plot.box() 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.