控制 scatterhist 标记透明度
Controlling scatterhist Marker Transparency
我需要控制在 MATLAB 中使用 scatterhist
命令生成的图形中标记的透明度。
以下post有助于处理直方图的颜色:。
- 如何修改标记的透明度?
- 如何在标记顶部添加等高线图?
tl;博士:
在 MATLAB R2019a 中,
scatterhist()
can do contours but it is difficult (yet ) 添加标记透明度,
scatterhistogram()
可以很容易地做透明度,但轮廓很难。
请参阅下面的第三个选项,使用 alpha()
, scatter()
, and histogram()
从头开始构建。
% MATLAB R2019a
n = 250; % Number of Points
X = exprnd(3,n,1);
Y = gamrnd(9,1/3,n,1);
您可以使用 MarkerAlpha
属性 调整标记透明度。
T = table(X,Y);
figure
s = scatterhistogram(T,'X','Y',...
'HistogramDisplayStyle','smooth',...
'LineStyle','-')
s.MarkerAlpha = 0.5; % adjust transparency
文档演示了此技术的变体。
请注意,scatterhistogram()
不能与 hold on
一起使用,无论是在之前还是之后,这都会阻止使用来自 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'
工作正常,但没有 MarkerAlpha
或 MarkerFaceAlpha
属性(您会收到错误提示)。
但是,轮廓是可能的。我认为基于 from @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. Access Property Values 在 MATLAB
2.Plot markers transparency and color gradient
对于 2018 年之前的 Matlab 版本,散点直方图 不可用。因此,我找到了另一种简单的方法来实现标记具有透明度:
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)
效果很好。
我需要控制在 MATLAB 中使用 scatterhist
命令生成的图形中标记的透明度。
以下post有助于处理直方图的颜色:
- 如何修改标记的透明度?
- 如何在标记顶部添加等高线图?
tl;博士:
在 MATLAB R2019a 中,
scatterhist()
can do contours but it is difficult (yet
scatterhistogram()
可以很容易地做透明度,但轮廓很难。
请参阅下面的第三个选项,使用 alpha()
, scatter()
, and histogram()
从头开始构建。
% MATLAB R2019a
n = 250; % Number of Points
X = exprnd(3,n,1);
Y = gamrnd(9,1/3,n,1);
您可以使用 MarkerAlpha
属性 调整标记透明度。
T = table(X,Y);
figure
s = scatterhistogram(T,'X','Y',...
'HistogramDisplayStyle','smooth',...
'LineStyle','-')
s.MarkerAlpha = 0.5; % adjust transparency
文档演示了此技术的变体。
请注意,scatterhistogram()
不能与 hold on
一起使用,无论是在之前还是之后,这都会阻止使用来自 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'
工作正常,但没有 MarkerAlpha
或 MarkerFaceAlpha
属性(您会收到错误提示)。
但是,轮廓是可能的。我认为基于
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. Access Property Values 在 MATLAB
2.Plot markers transparency and color gradient
对于 2018 年之前的 Matlab 版本,散点直方图 不可用。因此,我找到了另一种简单的方法来实现标记具有透明度:
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)
效果很好。