![]() TextElements(i).String=strcat('1E',TextElements(i). The next step consists in selecting all the elements of Type Text contained in tl : TextElements=findobj(tl,'Type','Text') įinally, The last step will be to loop over these and replace the numbers N with 1EN : for i=1:length(TextElements) Now if you go see the description of tl, you'll see that it's a Data object, containing Text and Line elements. Now instead of calling clabel(C,h1), we need to use another syntax of clabel that will allow us to loop trough the texts (The downgrade is that they'll be less pretty) : tl=clabel(C) Now call contourf with the vector of contour line values : =contourf(X,Y,log10(Z),1:nextpow10Z) and so on so you just need to find the first power of 10 bigger than the maximum of your data : nextpow10Z=ceil(log10(max(Z(:)))) You say you want them to be placed at 1,10. The first step consists in calculating the values of the contour lines. Summing up, I need to do one of the following:įind a way to set the logarithmic scale programmatically and let matlab worry about the isolines.īe able to manually change the label on the isolines without moving them (new_label = 10^old_label).Ī little 'Hack' that will work, although it will not be possible to keep the labels as nice as they are with a call to clabel(C,h1) : Ideally, I'd like to be able to something like this: = contourf(X, Y, Z, 'ZScale', 'Log') Īnd get the picture at the bottom with labels 10, 10^5, 10^10, etc. So, most of the labels won't be shown (they exceed data range) and the one that will, will be misplaced. But now my plotted data rang is (0, 45) (because I calculated the logarithm of it). 0:5:45 - and I'll get exactly what I have now.I can now set them to any vector you like: ![]() Here is how I do it (maybe there is another, better way, I don't know, I haven't found anything else): = contourf(X, Y, log(Z)) Īnd it looks well now - you can see how my data varies. Now, since my data in exponential, I have to use the logarithmic scale on the displayed values (the matrix Z) to show the data properly. I can set any countour lines labels I want, but they won't be visible since my data is exponential (And by the way, the labels that are visible in this plot, are the true ones, the ones I want to get on the next plot). My question is: how can I get the right labels on the contours? I don't want a color bar as described here. ![]() This is how I do it: = contourf(X, Y, log(Z)) When you make a new figure it defaults to a plain plot() style graph which then gets locked with the hold on command. In a different post, I explain how to freeze colors for different colormaps on the same figure.I have some data that I want to display as contour plot with logarithmic scale of the values (the matrix Z) and labelled countours. Incorrect: colorbar('YTick',log(Contours),'YTickLabel',Contours,'FontSize',12) Use: colorbar('YTick',log(Contours),'YTickLabel',Contours) Ĭaxis(log()) Ĥ) Make sure the last thing you do is set the Ticks! I've noticed if you have any other commands after this in the colorbar command, it reverts back to something funky.Įxample: Correct: colorbar('FontSize',12,'YTick',log(Contours),'YTickLabel',Contours) contourf(log(Data(:,:)),log(Contours)) ģ) Define the tick marks on your colorbar The last step is to make the colorbar show the correct data. Also be sure to take the log of your defined contours so they show up in the right spot. For the plot here, I used: Contours= Ģ) Plot your Data Using imagesc, contourf, or some other function, plot the log of your data. A quick google search on how to make logarithmic contour plots and logarithmic color-bars yielded some unhelpful results, so I thought I'd give a quick post here.ġ) Define Your Contours Define where you'd like contours. A lot of my data ranges orders of magnitude, and can be very hard to depict using standard MATLAB functions like imagesc, contourf, contour, etc.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |