【发布时间】:2016-07-28 05:34:42
【问题描述】:
我一直试图在 log-log 散点图上获得 半透明圆形标记。 MATLAB 自己的 scatter 绘图函数不会产生半透明标记(参见下面的 cmets),所以我使用来自 Central File Exchange 的这个奇妙的工具 scatter_patches 并且效果很好:
但是,我在将此代码调整为对数对数散点图时遇到问题。为了使用该程序获得对数散点图,我需要修复两件事:
1 .将轴更改为对数刻度。这可以通过在第 61 行之后添加以下内容来实现:
set(cax, 'XScale', 'log');
set(cax, 'YScale', 'log');
这会产生正确的对数刻度和网格点。
2 。但是,在我修复 1. 之后,标记的大小在我的图中并不统一。在对数图上,轴的较低值区域被放大。在 scatter_patches 图中,坐标轴下侧的标记较大,而坐标轴较高值侧的标记较小。因此,整个图上的标记大小并不相同。我尝试在第 221-222 行使用 log10(cSize) 而不是 cSize,但这只会缩小最大和最小标记大小之间的差异。它没有在绘图上产生相同大小的标记。
如果有人知道我在这里可能缺少什么,请分享。
任何帮助将不胜感激。
【问题讨论】:
-
您是否尝试过将 Matlab 的散点图与
set(hadle_to_scatterplot,'MarkerFaceColor','None')一起使用?似乎scatter_patches创建了一个圆圈而不是标记。 -
我试过了。将“MarkerFaceColor”设置为“无”相当于将透明度设置为 100%。但是,我想控制透明度。如果存在像“MarkerFaceAlphaValue”这样的属性,那么我可以将透明度设置为任意值。但是这样的属性是不存在的。 scatter_patches 使用补丁代替标记;所以可以设置一个 FaceAlphaValue。该程序还允许创建其他形状,而不仅仅是圆形。该程序在线性图上运行良好。这是需要进行一些更改的日志图。
-
我认为这个article 会让你感兴趣。你有没有尝试添加一个
exp()here:set(patchObjects(i), 'XData', cSize * sin(patchSpec) / ptsPerXUnit + xs(i)); set(patchObjects(i), 'YData', cSize * cos(patchSpec) / ptsPerYUnit + ys(i));likeset(patchObjects(i), 'XData', cSize * exp(sin(patchSpec))/ ptsPerXUnit + xs(i));但我没试过! -
Ups:更像这样:
set(patchObjects(i), 'XData', exp(cSize * sin(patchSpec)/ ptsPerXUnit + xs(i)));和 YData 一样
标签: matlab plot matlab-figure scatter-plot markers