【问题标题】:Controlling scatterhist Marker Transparency控制 scatterhist 标记透明度
【发布时间】:2019-10-30 14:48:22
【问题描述】:

我需要控制在MATLAB中使用scatterhist命令生成的图中标记的透明度。

以下帖子有助于处理直方图的颜色:Controlling scatterhist bar colors

  1. 如何修改标记的透明度?
  2. 如何在标记顶部添加等高线图?

【问题讨论】:

  • 您能否澄清一下轮廓应该包含哪些信息?点密度?

标签: matlab transparency scatter-plot contour histogram2d


【解决方案1】:

tl;博士: 在 MATLAB R2019a 中,
scatterhist() 可以做轮廓但很难(possible)添加标记透明度,而
scatterhistogram() 可以很容易地做透明度但轮廓很难。

请参阅下面使用alpha()scatter()histogram() 的第三个选项,它是从头开始构建的。


% MATLAB R2019a
n = 250;                % Number of Points
X = exprnd(3,n,1);
Y = gamrnd(9,1/3,n,1);  

使用scatterhistogram()

您可以使用MarkerAlpha 属性调整标记透明度。

T = table(X,Y);
figure
s = scatterhistogram(T,'X','Y',...
    'HistogramDisplayStyle','smooth',...
    'LineStyle','-')
s.MarkerAlpha = 0.5;                    %  adjust transparency

文档演示了这种技术的变体。

请注意,scatterhistogram() 不能在之前或之后与 hold on 一起使用,这会阻止使用 this solution from MATLAB Central

% This will give an error in R2019a
figure
s = scatterhistogram(T,'X','Y','HistogramDisplayStyle','smooth','LineStyle','-')
hold on
[m,c] = hist3([X', Y']);            % [m,c] = hist3([X(:), Y(:)]);
contour(c{1},c{2},m)

使用scatterhist()

如果您命名s = scatterhist(X,Y),那么s(1) 是散点图,s(2)s(3) 是直方图。这允许您更改属性。请注意s(1).Children.MarkerFaceColor = 'b' 工作正常,但没有MarkerAlphaMarkerFaceAlpha 属性(您会收到一个错误告诉您)。

但是,轮廓是可能的。我认为透明度可以基于@this comment 和@Dev-iL,但我还没有弄清楚。

figure
s = scatterhist(X,Y,'Direction','out')
s(1).Children.Marker = '.'
hold on
[m,c] = hist3([X(:), Y(:)]);
ch = contour(c{1},c{2},m)

从头开始构建:
显然,整个东西都可以从头开始手动构建(但这并不吸引人)。

使用alpha() 命令完成。

figure1 = figure;

% Create axes
axes1 = axes('Tag','scatter','Parent',figure1,...
    'Position',[0.35 0.35 0.55 0.55]);
hold(axes1,'on');

% Create plot
s = scatter(X,Y,'Parent',axes1,'MarkerFaceColor','r','Marker','o');

ylabel('Y');
xlabel('X');
box(axes1,'on');
% Create axes
axes2 = axes('Tag','yhist','Parent',figure1,...
    'Position',[0.0325806451612903 0.35 0.217016129032258 0.55]);
axis off
hold(axes2,'on');

% Create histogram
hx = histogram(X,'Parent',axes2,'FaceAlpha',1,'FaceColor','r',...
    'Normalization','pdf',...
    'BinMethod','auto');
view(axes2,[270 90]);
box(axes2,'on');

% Create axes
axes3 = axes('Tag','xhist','Parent',figure1,...
    'Position',[0.35 0.0493865030674847 0.55 0.186679572132827]);
axis off
hold(axes3,'on');

% Create histogram
hy = histogram(Y,'Parent',axes3,'FaceAlpha',1,'FaceColor','r',...
    'Normalization','pdf',...
    'BinMethod','auto');
box(axes3,'on');
axis(axes3,'ij');

[m,c] = hist3([X(:), Y(:)]);
contour(axes1,c{1},c{2},m)

alphaVal = 0.3;
alpha(s,0.5)            % Set Transparency
alpha(hx,0.5)
alpha(hy,0.5)

参考资料:
1. MATLAB 中的Access Property Values
2.Plot markers transparency and color gradient

【讨论】:

    【解决方案2】:

    对于 2018 年之前的 Matlab 版本,scatterhistogram 不可用。因此,我找到了另一种简单的方法来实现标记具有透明度:

    figure
    scatterhist(X,Y,'Kernel','on'); hold on
    hdl = get(gca,'children');
    set(hdl,'MarkerEdgeColor','none')
    scatter(hdl.XData,hdl.YData,50,'MarkerFaceColor','r',...
    'MarkerEdgeColor','none','MarkerFaceAlpha',0.2)
    

    这很好用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-28
      • 2012-02-06
      • 2011-12-14
      • 2018-11-01
      • 2017-11-28
      • 2014-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多