Changing the colour intensity of a 2D plot

조회 수: 21 (최근 30일)
John
John 2012년 12월 25일
Hi,
I'm plotting lat long data on a map like this.
I'm using the plotm() function:
plotm(x,y,'LineStyle','none','Marker','o','MarkerSize',20);
I'm trying to change the colours so that areas with more data are a different colour. I would like the intensity of the colour to change with the amount of data points.
Would anybody know how I could achieve this?
Thanks

답변 (2개)

Walter Roberson
Walter Roberson 2012년 12월 26일
plotm() cannot have different colors within any one line (column of data).
There are tricks for using patch() for drawing very narrow lines.
It appears to me that your data is sufficiently dense that you could use scatterm() and have the output look relatively continuous. scatterm() accepts a matrix of colors, one RGB row per point.
  댓글 수: 11
Walter Roberson
Walter Roberson 2013년 1월 14일
What I think I would suggest at this point is to use interp1() on relative_counts, using a look-up table that emphasized the low values but still had high values. For example,
mapval = interp1( 0:.1:1, [0 .3 .5 .7 .725 .75 .775 .8 .825 .9 1], relative_counts);
rgbarray = [zeros(length(x), 2), mapval(:)];
You would adjust the first parameter (possibly unevenly) according to where you wanted the intensity boundaries to be, and would adjust the second parameter according to the percentage blue you wanted each range to show up with.
John
John 2013년 1월 17일
편집: John 2013년 1월 17일
Hello Walter,
I tried your new suggestion. Unfortunately the points were all black, similar to the image posted below on Image Analyst's post. When you say 'adjust the first parameter', do mean, 0:.1:1? What would you suggest I change it to? Apologies for all the questions but I don't really understand the code and I'm not sure on how to proceed.
Thank you

댓글을 달려면 로그인하십시오.


Image Analyst
Image Analyst 2012년 12월 26일
편집: Image Analyst 2013년 1월 13일
If you treat it as an image you could do that, with some work. You could run the thing through a convolution, conv2(). This would give you a higher signal where the roads are more dense. Essentially that is an indexed image. Then you apply a colormap to it, and call ind2rgb to turn it into a color image. Then you use the roads as a mask over the color image so that roads in concentrated areas show up as a different color than roads in sparse areas. Hopefully that described it enough for you to carry out the code. Though I think this representation would be very confusing and distracting to look at.
for k = 1 : length(x)
yourImage(round(y(k)), round(x(k)) = 1;
end
densityImage = conv2(yourImage, ones(5)/25, 'same');
imshow(densityImage, []);
colormap(jet(256));
  댓글 수: 6
John
John 2013년 1월 16일
Hello Image Analyst,
I am not using the mapping toolbox to source the image. I am using this file on the file exchange to retrieve the map and then I just overlay the data on it. I code I use is below:
latlim = [53.0 53.6];
lonlim = [-6.5 -6];
figure
axis([lonlim, latlim])
axis image
plot_google_map
hold on
plot(x,y,'LineStyle','none','Marker','.','MarkerSize',3);
The x and y data (GPS) is in this file.
Would your method be possible with this setup?
Thank you
An example:
John
John 2013년 1월 19일
Hello Walter and Image Analyst,
Just wondering if you have had any further thoughts on this?
Thanks

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Geometric Transformation and Image Registration에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by