Hi,

Yeah, the GL stuff doesn't use the same colour maps as the 2D images. I 
can't see any documentation on the shaders (
http://www.pyqtgraph.org/documentation/3dgraphics/glmeshitem.html) that are 
used to colour the surface. Looking at the code under shaders.py does help 
though. For the "heightColor" shader, the 9 numbers in the array that are 
used (as in the Surface Plot example) are variables used in a formula to 
compute the RGB colour.

>From comment in code:
## colors fragments by z-value.
## This is useful for coloring surface plots by height.
## This shader uses a uniform called "colorMap" to determine how to map the 
colors:
##    red   = pow(z * colorMap[0] + colorMap[1], colorMap[2])
##    green = pow(z * colorMap[3] + colorMap[4], colorMap[5])
##    blue  = pow(z * colorMap[6] + colorMap[7], colorMap[8])
## (set the values like this: shader['uniformMap'] = array([...])

I assume the output RGB values are expressed as a range from 0 to 1. So to 
tweak the example to work with ranges from say zmin to zmax, I think 
something like:

p4.shader()['colorMap'] = np.array([0.2*(zmax - zmin), 2 - zmin, 0.5, 0.2*(zmax 
- zmin), 1 - zmin, 1, 0.2*(zmax - zmin), 0 - zmin, 2])


Patrick

On Saturday, 27 April 2019 00:55:42 UTC+9:30, Mostafa wrote:
>
> Hi Partick, 
>
> It works well when we set the following parameters for the 
> GLSurfacePlotItem: 
>
> computeNormals=False, smooth=False
>
>
> However, I have a problem with the colorMap since the default mapping 
> seems to be for data which is in [-1,1]. I have to change the mapping for 
> an arbitrary data range since in general, I do not know the range but I can 
> retrieve it when the code runs. I looked to the documentation for the 
> colorMap 
> <http://www.pyqtgraph.org/documentation/widgets/imageview.html?highlight=colormap#pyqtgraph.ImageView.setColorMap>
>  
> but I barely understood how to define it and set in GLSurfacePlotItem. 
> Besides, I want to add x,y axes which are fixed and they are necessary for 
> getting meaning to the surface plot. Any recommendations will be 
> appreciated. 
>
> Best, 
> Mostafa 
>
>
> On Tuesday, April 23, 2019 at 11:44:41 PM UTC-4, Patrick wrote:
>>
>> Hi,
>>
>> I don't use the 3D capabilities of pyqtgraph, but the example under 3D 
>> Graphics/Surface Plot (
>> https://github.com/pyqtgraph/pyqtgraph/blob/develop/examples/GLSurfacePlot.py)
>>  
>> has an animated 3D surface that looks to be rendering at 100+ FPS on my 
>> machine. Does that help? Otherwise if you can post a minimum working 
>> example then we might be able to suggest some ideas.
>>
>> Patrick
>>
>> On Tuesday, 23 April 2019 13:27:59 UTC+9:30, Mostafa wrote:
>>>
>>> Hello, 
>>>
>>> My eventual goal is to have a surface like the one that Matlab has for 
>>> plotting a 2D array of size N by M. For my application, M and N are not 
>>> greater than 256, so the greatest matrix I have has less than 100K entries. 
>>> However, I could not find a remedy for the slow updating of the 
>>> GLSurfacePlotItem. Basically, as the human eye perception is limited, the 
>>> frame update speed should be around 25-30 frame per second. Besides, the 
>>> surface plot is much far away from the nice representation in Matlab where 
>>> the plot has x and y axes with an option to add a colorbar to show the 
>>> color code values. There should be tricks to speed up the process similar 
>>> to the suggestion for 2D plot to disable autoscale in order to update the 
>>> graph much faster. 
>>>
>>> Any idea? 
>>>
>>> Best regards, 
>>> Mostafa 
>>>  
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyqtgraph/98de2679-65fa-4add-ade8-9ef412745124%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to