'Sets the data to be drawn. Data is expected to be scaled already (see ``OWScatterPlot3D`` for example).
:param data: Data
:type data: numpy array'

def set_plot_data(self, data, subset_data=None):

    self.makeCurrent()
    self.data = data
    self.data_array = numpy.array(data.transpose().flatten(), dtype=numpy.float32)
    self.example_size = len(data)
    self.num_examples = len(data[0])
    if self._use_opengl_3:
        tbo = glGenBuffers(1)
        glBindBuffer(GL_TEXTURE_BUFFER, tbo)
        glBufferData(GL_TEXTURE_BUFFER, (len(self.data_array) * 4), self.data_array, GL_STATIC_DRAW)
        glBindBuffer(GL_TEXTURE_BUFFER, 0)
        self.data_buffer = glGenTextures(1)
        glBindTexture(GL_TEXTURE_BUFFER, self.data_buffer)
        GL_R32F = 33326
        glTexBuffer(GL_TEXTURE_BUFFER, GL_R32F, tbo)
        glBindTexture(GL_TEXTURE_BUFFER, 0)
    else:
        orangeqt.Plot3D.set_data(self, self.data_array, self.num_examples, self.example_size)
