Problem with violinplot

Hi all,

violinplot is crashing with singular matrix data. See example.

Is this behaviour for a singular matrix intended or just a bug?

Cheers
Elmar

···

#####################################################
import numpy as np
import matplotlib.pyplot as plt

# data mimicing the
# original cumsum data (may sum up to 100)
N = 100
y1 = np.random.randn(N) + 3.0
y2 = np.random.randn(N) * 5.0 + 50
y3 = np.ones(N) * 100 # data set causing violinplot problem

plt.violinplot([y1, y2, y3])

plt.boxplot([y1, y2, y3]) # ok
plt.ylim(0,110)

#####################################################

OS: Debian
Anaconda 2.3.0 (64-bit)
Python 2.7.10
numpy 2.3.0
matplotlib 1.4.3

The KDE computation code is a copy of the KDE code from scipy (https://github.com/scipy/scipy/blob/master/scipy/stats/kde.py), I suggest raising this issue on their mailing list/github.

I strongly suspect that violin plot should be doing data sanitation on the way in or catching exceptions like this, but I am not familiar enough with the math to be sure what it should do instead.

Tom

···

On Fri, Jul 3, 2015 at 11:41 AM elmar werling <elmar@…1280…> wrote:

Hi all,

violinplot is crashing with singular matrix data. See example.

Is this behaviour for a singular matrix intended or just a bug?

Cheers

Elmar

#####################################################

import numpy as np

import matplotlib.pyplot as plt

data mimicing the

original cumsum data (may sum up to 100)

N = 100

y1 = np.random.randn(N) + 3.0

y2 = np.random.randn(N) * 5.0 + 50

y3 = np.ones(N) * 100 # data set causing violinplot problem

plt.violinplot([y1, y2, y3])

plt.boxplot([y1, y2, y3]) # ok

plt.ylim(0,110)

#####################################################

OS: Debian

Anaconda 2.3.0 (64-bit)

Python 2.7.10

numpy 2.3.0

matplotlib 1.4.3


Don’t Limit Your Business. Reach for the Cloud.

GigeNET’s Cloud Solutions provide you with the tools and support that

you need to offload your IT needs and focus on growing your business.

Configured For All Businesses. Start Your Cloud Today.

https://www.gigenetcloud.com/


Matplotlib-devel mailing list

Matplotlib-devel@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

from an end user point of view, matplotlibs violinplot should just do the same as seaborns violinplot.

···

#####################################################################
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

N = 100
y1 = np.random.randn(N) + 3.0
y2 = np.random.randn(N) * 5.0 + 50
y3 = np.ones(N) * 100 # causing plt.violinplot problem
y4 = np.arange(0) # causing plt.violinplot problem

#plt.violinplot([y1, y2, y3, y4])

sns.violinplot(data=[y1, y2, y3, y4])

On 03.07.2015 17:52, Thomas Caswell wrote:

The KDE computation code is a copy of the KDE code from scipy
(https://github.com/scipy/scipy/blob/master/scipy/stats/kde.py), I
suggest raising this issue on their mailing list/github.

I strongly suspect that violin plot should be doing data sanitation on
the way in or catching exceptions like this, but I am not familiar
enough with the math to be sure what it should do instead.

Tom

On Fri, Jul 3, 2015 at 11:41 AM elmar werling > <elmar@...1280... > <mailto:elmar@…1280…>> wrote:

    Hi all,

    violinplot is crashing with singular matrix data. See example.

    Is this behaviour for a singular matrix intended or just a bug?

    Cheers
    Elmar

    #####################################################
    import numpy as np
    import matplotlib.pyplot as plt

    # data mimicing the
    # original cumsum data (may sum up to 100)
    N = 100
    y1 = np.random.randn(N) + 3.0
    y2 = np.random.randn(N) * 5.0 + 50
    y3 = np.ones(N) * 100 # data set causing violinplot problem

    plt.violinplot([y1, y2, y3])

    plt.boxplot([y1, y2, y3]) # ok
    plt.ylim(0,110)

    #####################################################

    OS: Debian
    Anaconda 2.3.0 (64-bit)
    Python 2.7.10
    numpy 2.3.0
    matplotlib 1.4.3

    ------------------------------------------------------------------------------
    Don't Limit Your Business. Reach for the Cloud.
    GigeNET's Cloud Solutions provide you with the tools and support that
    you need to offload your IT needs and focus on growing your business.
    Configured For All Businesses. Start Your Cloud Today.
    https://www.gigenetcloud.com/
    _______________________________________________
    Matplotlib-devel mailing list
    Matplotlib-devel@lists.sourceforge.net
    <mailto:Matplotlib-devel@lists.sourceforge.net>
    matplotlib-devel List Signup and Options

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/

_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options

having a look at seaborns ViolinPlotter class (https://github.com/mwaskom/seaborn/blob/master/seaborn/categorical.py), they explicit handle the special case of "no data" and "single unique datapoint" at line 580 ff.

Could something similar be added to matplotlibs violinplot?

···

On 04.07.2015 12:28, elmar werling wrote:

from an end user point of view, matplotlibs violinplot should just do
the same as seaborns violinplot.

#####################################################################
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

N = 100
y1 = np.random.randn(N) + 3.0
y2 = np.random.randn(N) * 5.0 + 50
y3 = np.ones(N) * 100 # causing plt.violinplot problem
y4 = np.arange(0) # causing plt.violinplot problem

#plt.violinplot([y1, y2, y3, y4])

sns.violinplot(data=[y1, y2, y3, y4])

On 03.07.2015 17:52, Thomas Caswell wrote:

The KDE computation code is a copy of the KDE code from scipy
(https://github.com/scipy/scipy/blob/master/scipy/stats/kde.py), I
suggest raising this issue on their mailing list/github.

I strongly suspect that violin plot should be doing data sanitation on
the way in or catching exceptions like this, but I am not familiar
enough with the math to be sure what it should do instead.

Tom

On Fri, Jul 3, 2015 at 11:41 AM elmar werling >> <elmar@...1280... >> <mailto:elmar@…1280…>> wrote:

     Hi all,

     violinplot is crashing with singular matrix data. See example.

     Is this behaviour for a singular matrix intended or just a bug?

     Cheers
     Elmar

     #####################################################
     import numpy as np
     import matplotlib.pyplot as plt

     # data mimicing the
     # original cumsum data (may sum up to 100)
     N = 100
     y1 = np.random.randn(N) + 3.0
     y2 = np.random.randn(N) * 5.0 + 50
     y3 = np.ones(N) * 100 # data set causing violinplot problem

     plt.violinplot([y1, y2, y3])

     plt.boxplot([y1, y2, y3]) # ok
     plt.ylim(0,110)

     #####################################################

     OS: Debian
     Anaconda 2.3.0 (64-bit)
     Python 2.7.10
     numpy 2.3.0
     matplotlib 1.4.3

     ------------------------------------------------------------------------------
     Don't Limit Your Business. Reach for the Cloud.
     GigeNET's Cloud Solutions provide you with the tools and support that
     you need to offload your IT needs and focus on growing your business.
     Configured For All Businesses. Start Your Cloud Today.
     https://www.gigenetcloud.com/
     _______________________________________________
     Matplotlib-devel mailing list
     Matplotlib-devel@lists.sourceforge.net
     <mailto:Matplotlib-devel@lists.sourceforge.net>
     matplotlib-devel List Signup and Options

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/

_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/

Yes, that seems reasonable. @…1282… you seem to have a pretty good grasp of the code and the use case, would you mind taking a crack at adding those special cases?

Tom

···

On Sat, Jul 4, 2015 at 8:58 AM elmar werling <elmar@…1280…> wrote:

having a look at seaborns ViolinPlotter class

(https://github.com/mwaskom/seaborn/blob/master/seaborn/categorical.py),

they explicit handle the special case of “no data” and "single unique

datapoint" at line 580 ff.

Could something similar be added to matplotlibs violinplot?

On 04.07.2015 12:28, elmar werling wrote:

from an end user point of view, matplotlibs violinplot should just do

the same as seaborns violinplot.

#####################################################################

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

N = 100

y1 = np.random.randn(N) + 3.0

y2 = np.random.randn(N) * 5.0 + 50

y3 = np.ones(N) * 100 # causing plt.violinplot problem

y4 = np.arange(0) # causing plt.violinplot problem

#plt.violinplot([y1, y2, y3, y4])

sns.violinplot(data=[y1, y2, y3, y4])

On 03.07.2015 17:52, Thomas Caswell wrote:

The KDE computation code is a copy of the KDE code from scipy

(https://github.com/scipy/scipy/blob/master/scipy/stats/kde.py), I

suggest raising this issue on their mailing list/github.

I strongly suspect that violin plot should be doing data sanitation on

the way in or catching exceptions like this, but I am not familiar

enough with the math to be sure what it should do instead.

Tom

On Fri, Jul 3, 2015 at 11:41 AM elmar werling > > >> <elmar@…272…1280… > > >> mailto:elmar@...1280...> wrote:

 Hi all,
 violinplot is crashing with singular matrix data. See example.
 Is this behaviour for a singular matrix intended or just a bug?
 Cheers
 Elmar
 #####################################################
 import numpy as np
 import matplotlib.pyplot as plt
 # data mimicing the
 # original cumsum data (may sum up to 100)
 N = 100
 y1 = np.random.randn(N) + 3.0
 y2 = np.random.randn(N) * 5.0 + 50
 y3 = np.ones(N) * 100   # data set causing violinplot problem
 plt.violinplot([y1, y2, y3])
 plt.boxplot([y1, y2, y3])  # ok
 plt.ylim(0,110)
 #####################################################
 OS:     Debian
 Anaconda 2.3.0 (64-bit)
 Python 2.7.10
 numpy 2.3.0
 matplotlib 1.4.3
 ------------------------------------------------------------------------------
 Don't Limit Your Business. Reach for the Cloud.
 GigeNET's Cloud Solutions provide you with the tools and support that
 you need to offload your IT needs and focus on growing your business.
 Configured For All Businesses. Start Your Cloud Today.
 [https://www.gigenetcloud.com/](https://www.gigenetcloud.com/)
 _______________________________________________
 Matplotlib-devel mailing list
 Matplotlib-devel@lists.sourceforge.net
 <mailto:Matplotlib-devel@...1158....net>
 [https://lists.sourceforge.net/lists/listinfo/matplotlib-devel](https://lists.sourceforge.net/lists/listinfo/matplotlib-devel)

Don’t Limit Your Business. Reach for the Cloud.

GigeNET’s Cloud Solutions provide you with the tools and support that

you need to offload your IT needs and focus on growing your business.

Configured For All Businesses. Start Your Cloud Today.

https://www.gigenetcloud.com/


Matplotlib-devel mailing list

Matplotlib-devel@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Don’t Limit Your Business. Reach for the Cloud.

GigeNET’s Cloud Solutions provide you with the tools and support that

you need to offload your IT needs and focus on growing your business.

Configured For All Businesses. Start Your Cloud Today.

https://www.gigenetcloud.com/


Don’t Limit Your Business. Reach for the Cloud.

GigeNET’s Cloud Solutions provide you with the tools and support that

you need to offload your IT needs and focus on growing your business.

Configured For All Businesses. Start Your Cloud Today.

https://www.gigenetcloud.com/


Matplotlib-devel mailing list

Matplotlib-devel@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Hi Tom,

tried to understand the internals of matplotlib during the weekend. Sorry, cound not figure out how matloblib works and where to catch the exceptions.

It would be appreciated if someone of the dev group could add the special cases handling.

Elmar

···

On 04.07.2015 15:23, Thomas Caswell wrote:

Yes, that seems reasonable. @elmar you seem to have a pretty good grasp
of the code and the use case, would you mind taking a crack at adding
those special cases?

Tom

On Sat, Jul 4, 2015 at 8:58 AM elmar werling <elmar@...1280... > <mailto:elmar@…1280…>> wrote:

    having a look at seaborns ViolinPlotter class
    (https://github.com/mwaskom/seaborn/blob/master/seaborn/categorical.py),
    they explicit handle the special case of "no data" and "single unique
    datapoint" at line 580 ff.

    Could something similar be added to matplotlibs violinplot?

    On 04.07.2015 12:28, elmar werling wrote:
     > from an end user point of view, matplotlibs violinplot should just do
     > the same as seaborns violinplot.
     >
     > #####################################################################
     > import numpy as np
     > import matplotlib.pyplot as plt
     > import seaborn as sns
     >
     > N = 100
     > y1 = np.random.randn(N) + 3.0
     > y2 = np.random.randn(N) * 5.0 + 50
     > y3 = np.ones(N) * 100 # causing plt.violinplot problem
     > y4 = np.arange(0) # causing plt.violinplot problem
     >
     > #plt.violinplot([y1, y2, y3, y4])
     >
     > sns.violinplot(data=[y1, y2, y3, y4])
     >
     > On 03.07.2015 17:52, Thomas Caswell wrote:
     >> The KDE computation code is a copy of the KDE code from scipy
     >> (https://github.com/scipy/scipy/blob/master/scipy/stats/kde.py), I
     >> suggest raising this issue on their mailing list/github.
     >>
     >> I strongly suspect that violin plot should be doing data
    sanitation on
     >> the way in or catching exceptions like this, but I am not familiar
     >> enough with the math to be sure what it should do instead.
     >>
     >> Tom
     >>
     >> On Fri, Jul 3, 2015 at 11:41 AM elmar werling > >> <elmar@...1280... > <mailto:elmar@…1280…> > >> <mailto:elmar@…1280… > <mailto:elmar@…1280…>>> wrote:
     >>
     >> Hi all,
     >>
     >> violinplot is crashing with singular matrix data. See example.
     >>
     >> Is this behaviour for a singular matrix intended or just a bug?
     >>
     >> Cheers
     >> Elmar
     >>
     >> #####################################################
     >> import numpy as np
     >> import matplotlib.pyplot as plt
     >>
     >> # data mimicing the
     >> # original cumsum data (may sum up to 100)
     >> N = 100
     >> y1 = np.random.randn(N) + 3.0
     >> y2 = np.random.randn(N) * 5.0 + 50
     >> y3 = np.ones(N) * 100 # data set causing violinplot problem
     >>
     >> plt.violinplot([y1, y2, y3])
     >>
     >> plt.boxplot([y1, y2, y3]) # ok
     >> plt.ylim(0,110)
     >>
     >> #####################################################
     >>
     >> OS: Debian
     >> Anaconda 2.3.0 (64-bit)
     >> Python 2.7.10
     >> numpy 2.3.0
     >> matplotlib 1.4.3
     >>
    ------------------------------------------------------------------------------
     >> Don't Limit Your Business. Reach for the Cloud.
     >> GigeNET's Cloud Solutions provide you with the tools and
    support that
     >> you need to offload your IT needs and focus on growing your
    business.
     >> Configured For All Businesses. Start Your Cloud Today.
     >> https://www.gigenetcloud.com/
     >> _______________________________________________
     >> Matplotlib-devel mailing list
     >>
    Matplotlib-devel@lists.sourceforge.net
    <mailto:Matplotlib-devel@lists.sourceforge.net>
     >>
    <mailto:Matplotlib-devel@lists.sourceforge.net
    <mailto:Matplotlib-devel@lists.sourceforge.net>>
     >> matplotlib-devel List Signup and Options
     >>
    ------------------------------------------------------------------------------
     >> Don't Limit Your Business. Reach for the Cloud.
     >> GigeNET's Cloud Solutions provide you with the tools and support
    that
     >> you need to offload your IT needs and focus on growing your
    business.
     >> Configured For All Businesses. Start Your Cloud Today.
     >> https://www.gigenetcloud.com/
     >>
     >> _______________________________________________
     >> Matplotlib-devel mailing list
     >>
    Matplotlib-devel@lists.sourceforge.net
    <mailto:Matplotlib-devel@lists.sourceforge.net>
     >> matplotlib-devel List Signup and Options
     >>
     >
    ------------------------------------------------------------------------------
     > Don't Limit Your Business. Reach for the Cloud.
     > GigeNET's Cloud Solutions provide you with the tools and support that
     > you need to offload your IT needs and focus on growing your business.
     > Configured For All Businesses. Start Your Cloud Today.
     > https://www.gigenetcloud.com/
     >

    ------------------------------------------------------------------------------
    Don't Limit Your Business. Reach for the Cloud.
    GigeNET's Cloud Solutions provide you with the tools and support that
    you need to offload your IT needs and focus on growing your business.
    Configured For All Businesses. Start Your Cloud Today.
    https://www.gigenetcloud.com/
    _______________________________________________
    Matplotlib-devel mailing list
    Matplotlib-devel@lists.sourceforge.net
    <mailto:Matplotlib-devel@lists.sourceforge.net>
    matplotlib-devel List Signup and Options

------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/

_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
matplotlib-devel List Signup and Options