0

I am having trouble with creating a boxplot. There are no errors, it just doesn't show all the point:
3 df's :

Till 513

My code:

data = [df2['Counts'][0:470], df2['Counts'][471:494],df2['Counts'][495:]]
fig1, ax4 = plt.subplots()
ax4.set_title('Furter vs Krum serum')
plt.xticks([] ,['F4','Km','Liquid' ])
ax4.boxplot(data)
plt.show()

The box plot is missing the "Km and liquid" parts (there is only one point) and shows only the F4 which is the largest set.

JohanC
  • 71,591
  • 8
  • 33
  • 66
TheUndecided
  • 187
  • 1
  • 12

1 Answers1

0

Probably your dataframe doesn't contain the information you're expecting. Or maybe the F4 part has a completely different range? If e.g. the values of Km, Liquid are 10 times smaller, they would get reduced to just a line near zero.

You could print out df2['Counts'][471:494] and df2['Counts'][495:] to see how the values look like. The code below adds a scatter plot to see all the points.

Some remarks:

  • Slicing as in array[a:b] goes from a till b-1 (similar to python's range function). So you might want to use data = [df2['Counts'][0:471], df2['Counts'][471:495],df2['Counts'][495:]] or so.
  • It is recommended not to mix the ax. and plt. way of calling matplotlib functions.
  • Usually it is better to call the xticks functions after creating the main plot, as many functions try to set their own ticks.
  • When setting the xticklabels, it is recommended to set the corresponding xticks at the same time. In this case, the ticks are numbered internally as 1, 2, 3.

Here is some example code showing how things could fit together. To help debugging, a scatter plot is added to see where all the points really are.

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

df2 = pd.DataFrame({'Counts': np.random.normal(0.02, 0.002, 513)})

data = [df2['Counts'][0:471], df2['Counts'][471:495], df2['Counts'][495:]]
fig1, ax4 = plt.subplots()
ax4.boxplot(data)
for i in range(3):
    ax4.scatter(np.repeat([i+1], len(data[i])), data[i])
ax4.set_title('Furter vs Krum serum')
ax4.set_xticks([1, 2, 3])
ax4.set_xticklabels(['F4', 'Km', 'Liquid'])
plt.show()

example plot

JohanC
  • 71,591
  • 8
  • 33
  • 66