对数 - 对数散点图上的半透明标记

r2d*_*2d2 5 matlab plot markers scatter-plot matlab-figure

我一直试图在对数 - 对数散点图上得到半透明的圆形标记.MATLAB自己的绘图功能不会产生半透明标记(参见下面的注释),所以我用这个奇妙的工具,从中央文件交换,它工作得很好:scatterscatter_patches

但是,我在修改日志日志散点图中的代码时遇到了问题.为了使用该程序获得对数 - 对数散点图,我需要修复两件事:

1.将轴更改为对数刻度.这可以通过在第61行之后添加以下内容来实现:

set(cax, 'XScale', 'log'); 
set(cax, 'YScale', 'log'); 
Run Code Online (Sandbox Code Playgroud)

这会产生正确的对数刻度和网格点.

2.然而,在我修正了1之后,我的情节中标记的大小并不均匀.在对数图上,轴的较低值区域被放大.在scatter_patches图中,轴下侧的标记较大,而朝向轴的较高值侧的标记较小.因此,整个图上的标记大小不一样.我尝试使用log10(cSize)而不是cSize第221-222行,但这只是缩小了最大和最小标记尺寸之间的差异.它没有在图上产生相同大小的标记.

如果有人知道我在这里可能缺少什么,请分享.

任何帮助将不胜感激.

the*_*alk 6

Matlab R2014b以来,事情变得非常简单.不需要文件交换的其他功能,只需要一些未记录的功能.基本思想是获取标记的隐藏句柄,并为最后一个值应用值<1,EdgeColorData以实现所需的透明度.

开始了:

%// example data
x = linspace(0,3*pi,200);
y = cos(x) + rand(1,200);

%// plot scatter, get handle
h = scatter(x,y); 
drawnow; %// important

%// get marker handle
hMarkers = h.MarkerHandle; 

%// get current edge and face color
edgeColor = hMarkers.EdgeColorData
faceColor = hMarkers.FaceColorData

%// set face color to the same as edge color
faceColor = edgeColor;

%// opacity
opa = 0.3;

%// set marker edge and face color
hMarkers.EdgeColorData = uint8( [edgeColor(1:3); 255*opa] ); 
hMarkers.FaceColorData = uint8( [faceColor(1:3); 255*opa] ); 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述