0

I have the following python code:

import numpy as np
import sklearn as sk
import pandas as pd
import scipy as sp
import matplotlib.pyplot as plt
import sys
from sklearn.decomposition import PCA
from sklearn.svm import OneClassSVM



np.random.seed(0)

x1 = np.random.normal((1,1), 0.1, (200, 2))
x2 = np.random.normal((1,0), .1, (200, 2))
x3 = np.random.normal((0,1), .1, (200, 2))
x4 = np.array([[0.5, 0.5],
               [0.5, 1],
               [1, 0.5]])


X = np.vstack([x1, x2, x3])#, x4])
X = sk.preprocessing.scale(X)

X_new = np.vstack([x1, x2, x3, x4])
X_new = sk.preprocessing.scale(X_new)



n, p = X_new.shape

anomaly_index = np.array(range(n-3, n))
normal_index = np.array(range(n-3))

#plt.scatter(X_new[normal_index,0], X_new[normal_index,1])
#plt.scatter(X_new[anomaly_index,0], X_new[anomaly_index,1], marker='*', c='r')
#plt.show()


gammas = [0.5]#, 0.7, 0.9]
nus = [0.01]#, 0.3, 0.8]
nrow = len(gammas)
ncol = len(nus)


j = 0
for gamma in gammas:
    for nu in nus:
        j += 1

        svm = OneClassSVM(kernel='rbf', degree=2, 
                          gamma=gamma, coef0=0.0, 
                          tol=0.001, 
                          nu=nu, shrinking=True, 
                          cache_size=200, 
                          verbose=False, 
                          max_iter=-1, random_state=None)
        svm.fit(X)

        anomaly_score =  - svm.decision_function(X_new)
        vmin = anomaly_score.min()
        vmax = anomaly_score.max()


        xx1, yy1 = np.meshgrid(np.linspace(X_new[:,0].min()-0.3, 
                                           X_new[:,0].max()+0.3, 1000), 
                               np.linspace(X_new[:,1].min()-0.3, 
                                           X_new[:,1].max()+0.3, 1000))
        Z1 = svm.decision_function(np.c_[xx1.ravel(), yy1.ravel()])
        Z1 = Z1.reshape(xx1.shape)



        plt.subplot(nrow, ncol, j)
        plt.title(r'$\gamma=$' + str(gamma) + r'   $\nu=$' + str(nu) + '')
        plt.scatter(X_new[normal_index, 0], X_new[normal_index, 1], 
                    c=anomaly_score[normal_index],  alpha=2, s=50, 
                    vmin=vmin, vmax=vmax)
        plt.scatter(X_new[anomaly_index, 0], 
                    X_new[anomaly_index, 1], marker='*',
                    c=anomaly_score[anomaly_index],  alpha=2, s=90,
                    vmin=vmin, vmax=vmax)

        plt.colorbar()
        #cb = plt.colorbar()
        #tick_locator = ticker.MaxNLocator(nbins=5)
        #cb.locator = tick_locator
        #cb.update_ticks()

        plt.contourf( xx1, yy1, Z1, cmap=plt.cm.Blues,
                      levels=np.linspace(Z1.min(), 0.3, 7), alpha=0.1)
        plt.xlim(X_new[:,0].min()-0.3, X_new[:, 0].max()+0.3)
        plt.ylim(X_new[:,1].min()-0.3, X_new[:, 1].max()+0.3)
        plt.xlabel(r'$x_1$', size=20)
        plt.ylabel(r'$x_2$', size=20)
        plt.locator_params(nbins=4)
        plt.tight_layout()
#plt.savefig('one_class_svm_3_clusters_grid.pdf')
plt.show()

This works fine but if I uncomment the plt.savefig I receive the following error:

Process Python[/home/donbeo/Documents/pythoncode/fault_detection/one_class_svm/oc_svm_3_clusters.py] finished
Python 3.4.0 (default, Jun 19 2015, 14:20:21) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> >>> >>> >>> >>> 

Process Python[/home/donbeo/Documents/pythoncode/fault_detection/one_class_svm/oc_svm_3_clusters.py] finished
Python 3.4.0 (default, Jun 19 2015, 14:20:21) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> >>> >>> >>> Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/colors.py", line 355, in to_rgba
    'number in rbga sequence outside 0-1 range')
ValueError: number in rbga sequence outside 0-1 range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/donbeo/Documents/pythoncode/fault_detection/one_class_svm/oc_svm_3_clusters.py", line 98, in <module>
    plt.savefig(plot_path + 'one_class_svm_3_clusters_grid.pdf')
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/pyplot.py", line 577, in savefig
    res = fig.savefig(*args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/figure.py", line 1476, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_qt5agg.py", line 161, in print_figure
    FigureCanvasAgg.print_figure(self, *args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backend_bases.py", line 2211, in print_figure
    **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_pdf.py", line 2485, in print_pdf
    self.figure.draw(renderer)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/figure.py", line 1085, in draw
    func(*args)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_base.py", line 2110, in draw
    a.draw(renderer)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/collections.py", line 772, in draw
    Collection.draw(self, renderer)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/artist.py", line 59, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/collections.py", line 320, in draw
    self._offset_position)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backends/backend_pdf.py", line 1658, in draw_path_collection
    antialiaseds, urls, offset_position):
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backend_bases.py", line 488, in _iter_collection
    gc0.set_foreground(fg)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/backend_bases.py", line 1008, in set_foreground
    self._rgb = colors.colorConverter.to_rgba(fg)
  File "/usr/local/lib/python3.4/dist-packages/matplotlib/colors.py", line 376, in to_rgba
    'to_rgba: Invalid rgba arg "%s"\n%s' % (str(arg), exc))
ValueError: to_rgba: Invalid rgba arg "[ 0.  0.  0.  2.]"
number in rbga sequence outside 0-1 range
>>> 
1
  • Can you reduce this to a minimal example? There is way too much going on in this one. Commented Jun 26, 2015 at 16:52

1 Answer 1

2

Look at the error message, it tells you what is wrong. The last line of your traceback shows that alpha (the fourth value) of your rgba color is set to 2, while it should be between 0 and 1.

As a small example,

x1 = np.random.normal((1,1), 0.1, (200, 2))
plt.scatter(x1[:,0], x1[:,1], alpha=2)
plt.show()

will give the same error message. Simply replace your alpha value by a number between 0 and 1 and the error goes away:

x1 = np.random.normal((1,1), 0.1, (200, 2))
plt.scatter(x1[:,0], x1[:,1], alpha=0.5)
plt.show()

In your code, change the alpha value in the following lines. Here, I replaced it by 0.5 but you can chose what you want as long as it is between 0 and 1.

plt.scatter(X_new[normal_index, 0], X_new[normal_index, 1], 
                c=anomaly_score[normal_index],  alpha=0.5, s=50, 
                vmin=vmin, vmax=vmax)
plt.scatter(X_new[anomaly_index, 0], 
                X_new[anomaly_index, 1], marker='*',
                c=anomaly_score[anomaly_index],  alpha=0.5, s=90,
                vmin=vmin, vmax=vmax)
Sign up to request clarification or add additional context in comments.

2 Comments

thanks a lot it works. It is strange the fact that I was able to save png plot with alpha=2
you're welcome :-) I don't know why you were able to save the png plot, strange indeed.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.