[scilab-Users] heatmap / Matplot

Joshua Auerbach joshua.auerbach at uvm.edu
Mon Jun 9 20:39:34 CEST 2008


Mathieu Dubois wrote:
> Hello Joshua, Hello scilabers,
>
> Joshua Auerbach a écrit :
>> Thanks for the info on grayplot.  A little confusing that something 
>> that plots colors would be called "gray"plot don't you think?
> This came to my mind when I was writing you ;)
>>
>> In any case, this almost gets me to where I want, except grayplot 
>> determines the color for each rectangle from the average value at 
>> each corner and I do not want this.  I want each rectangle to only 
>> take its color from one value (what is at the center of the 
>> rectangle).  ie if my z matrix is binary I want to only see two 
>> colors but with grayplot i will get a color for 0 (all four corners 
>> 0), 0.25 (one corner 1), 0.5 (two corners 1), 0.75 (three corners 1) 
>> and 1 (all four corners 1).
>>
>> Any advice on how to do that?
> Maybe.
>
> You can choose the number of colors in the colormap. If you use 
> graycolormap(2) you will have one color for '0' and one for '1' (if 
> you have N discrete values, graycolormap(N) works). See the script. I 
> am not completely satisfied with this so if somebody have a better 
> idea let me know.
>
I had tried that, but the problem with that is that rectangles with 2 or 
more corners with value 1 will get the color value for 1, whereas I want 
only those that actually have value 1 to be colored that way.

> The more general way would be to paint the rectangle [(x(i), y(j)), 
> (x(i+1), y(j+1))] with the right color. I don't know enough for that. 
> Scilab graphics are rather complex.
Not sure how I would do that.  Thanks for the help in any case.

-Josh
>>
>> Thanks,
>> Josh
> Thanks for the question,
> Mathieu
>>
>> duboism at limsi.fr wrote:
>>> Hi Joshua,
>>>
>>> I think that the function grayplot (and its friends fgrayplot, 
>>> Sgrayplot)
>>> would be useful for you but you will have to reformat your data.
>>>
>>> grayplot takes 3 arguments: x (vector of x coordinates, size nx), y
>>> (vector of y coordinates, size ny) and a nx*ny matrix data (the 
>>> value at
>>> data(i,j) is the value of point (x(i), y(j)) ). See the script
>>> test_grayplot.sce.
>>>
>>> It should not be hard to re-format your data this way.
>>>
>>> Note the use of the zminmax option to plot different data with the same
>>> color scale (see test_grayplot2.sce).
>>> Note also that on the x86_64 architecture the function colorbar seems
>>> broken (in fact you cannot use it since it raises an error).
>>>
>>> Mathieu
>>>
>>>  
>>>> Hi,
>>>>
>>>> I am looking for some assistance.  I am trying to make what I know 
>>>> as a
>>>> heatmap.  Basically I have data for many points on a grid and want to
>>>> construct a 2d plot where each point is given a color on a gradient
>>>> (From blue to red say) based on the data value at that point.  I have
>>>> the data in the form of a matrix with 3 columns x-coord, y-coord, data
>>>> value
>>>>
>>>> Currently I am making this type of plot by transforming my grid
>>>> coordinates into matrix coordinates of a new matrix and scaling my 
>>>> data
>>>> values into the range [0, NUM_COLORS] and using the Matplot 
>>>> function to
>>>> plot this data.  This method does work, but has a few shortcomings: I
>>>> lose the original scale of my grid since the axis labels are based on
>>>> the matrix coordinates.  There is no key explaining the gradient and
>>>> even if there were I would lose the original scale of my data values.
>>>>
>>>> Does anyone know how to get around these limitations or know of a 
>>>> better
>>>> way to accomplish what I am trying to do?  I'd appreciate any help.
>>>>
>>>> Cheers,
>>>> Josh
>>>>
>>>>     
>>
>




More information about the users mailing list