Skip to content

Violin plots fail when empty array is included among violin data #342

Description

@JS3xton

The following code fails using commit bc98686 (a few commits upstream of when plot-violin was merged into develop):

>>> FlowCal.plot.violin(data=[[1,2,3],[],[4,5,6]])

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\sexto\.conda\envs\py3_anaconda2020.07_fc_JS3xton_bc98686\lib\site-packages\flowcal-1.2.2-py3.8.egg\FlowCal\plot.py", line 1753, in violin
  File "<__array_function__ internals>", line 5, in amin
  File "C:\Users\sexto\.conda\envs\py3_anaconda2020.07_fc_JS3xton_bc98686\lib\site-packages\numpy\core\fromnumeric.py", line 2792, in amin
    return _wrapreduction(a, np.minimum, 'min', axis, None, out,
  File "C:\Users\sexto\.conda\envs\py3_anaconda2020.07_fc_JS3xton_bc98686\lib\site-packages\numpy\core\fromnumeric.py", line 90, in _wrapreduction
    return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
ValueError: zero-size array to reduction operation minimum which has no identity

The error comes from using np.min() to calculate defaults limits for the data axis:

        data_min = np.inf
        data_max = -np.inf
        for idx in range(data_length):
            violin_data = np.array(data[idx], dtype=np.float).flat
            violin_min = np.min(violin_data)  # <-- fails here
            violin_max = np.max(violin_data)
            if violin_min < data_min:
                data_min = violin_min
            if violin_max > data_max:
                data_max = violin_max
        data_lim = (data_min, data_max)

np.min() fails when called on an empty array.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions