Управление рассеивателем маркера прозрачности - PullRequest
0 голосов
/ 30 октября 2019

Мне нужно контролировать прозрачность маркеров на рисунке, полученном с помощью команды scatterhist в MATLAB.

fig1

Следующий пост полезен при обработке цвета гистограмм: Управление цветами полосы рассеяния .

  1. Как можно изменить прозрачность маркеров?
  2. Как добавить контурный график поверх маркеров?

1 Ответ

3 голосов
/ 30 октября 2019

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.

Plot using scatterhistogram with marker transparency but no contours.

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 , но я еще не понял этого.

Plot using scatterhist with contours but no marker transparency.

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 это делается.

Scatterplot with histograms, transparency, and contours.

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. Прозрачность маркеров и градиент цвета

...