tl; dr : в MATLAB R2019a,
scatterhist
может делать контуры, но трудно (пока возможно ) добавить прозрачность маркераи
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 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
(вы получите сообщение об ошибке).
Но, Контуры возможны . Я думаю, что прозрачность возможна на основе этого комментария от @ 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
2. Прозрачность маркеров и градиент цвета