1

Following what reported here I tried to create a boxplot with an overlayed scatter plot.

but when i run:

In [27]: table1.t_in[table1.duration==6]
Out[27]: 
counter
7     308.351304
9     305.354920
14    307.832732
15    332.097405
21    309.711144
22    308.227617
23    317.342377
24    306.140126
25    339.185127
27    336.411869
30    313.287353
Name: t_in, dtype: float64
In [28]: table1.t_in[table1.duration==7]
Out[28]: 
counter
10    401.891105
11    384.290236
13    387.516037
17    369.366080
18    383.584934
19    357.466159
20    380.888071
26    399.989748
34    353.118944
Name: t_in, dtype: float64
In [29]: fig,ax=plt.subplots()
    ...: 
    ...: for i in [6,7]:
    ...:     y = table1.t_in[table1.duration==i]
    ...:     # Add some random "jitter" to the x-axis
    ...:     x = np.random.normal(i, 0.03, size=len(y))
    ...:     ax.plot(x, y, 'r.', alpha=0.5)
    ...:     
    ...: bp = table1.boxplot(column='t_in',by='duration',grid=False,ax=ax)

I get:enter image description here

and if i skip only the last line i get: enter image description here

How can I plot like the linked question?

Community
  • 1
  • 1
marpis
  • 91
  • 1
  • 7

1 Answers1

2

Using ipython Notebook. I tried the boxplot-Methode of matplotlib. You cannot include in the for-loop. But hope it helps.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

# data
table1 = pd.DataFrame({"t_in":[308.351304, 305.354920, 307.832732,
                           332.097405, 309.711144, 308.227617,
                           317.342377, 306.140126, 339.185127,
                           336.411869, 313.287353, 401.891105,
                           384.290236, 387.516037, 369.366080,
                           383.584934, 357.466159, 380.888071,
                           399.989748, 353.118944]}, 
                       index=[7,9,14,15,21,22,23,24,25,27,30,
                              10,11,13,17,18,19,20,26,34])

table1["duration"] = np.where(table1["t_in"]<353, 6, 7)

# plotting
fig,ax = plt.subplots()
colors = ["red", "blue"]
for i in [6,7]:
    y = table1.t_in[table1.duration==i]
    # Add some random "jitter" to the x-axis
    x = np.random.normal(i, 0.03, size=len(y))
    ax.scatter(x, y, c=colors[i-6], alpha=0.5)

ax.boxplot([table1.t_in[table1.duration==6].values,table1.t_in[table1.duration==7].values], positions=[6,7])
plt.show()

enter image description here

feinmann
  • 1,060
  • 1
  • 14
  • 20