2015-08-17 2 views
6

У меня есть данные, которые будут отображаться на одной фигуре. Данные о шуме разрушают другие данные. Как изменить уровень прозрачности данных? В моем случае я использую команду hold all для построения нескольких данных. Одним из решений является изменение LineWidth, но я не смог найти способ для прозрачности. Я попытался alpha следующимКак установить непрозрачность для сюжета?

plot(noise_x, 'k', 'LineWidth', 1, 'alpha', 0.2)

, но не повезло.

ответ

10

introduction of the new graphic engine HG2 С в Matlab R2014b, все стало довольно легко. Просто нужно немного копать.

Свойство цвета теперь содержит четвертое значение непрозрачности/прозрачности/фейс-альфа, так что это все, что вам нужно изменить:

x = linspace(-10,10,100); y = x.^2; 
p1 = plot(x,y,'LineWidth',5); hold on 
p2 = plot(x,-y+y(1),'LineWidth',5); 

% // forth value sets opacity 
p1.Color(4) = 0.5; 
p2.Color(4) = 0.5; 

enter image description here

Даже цветовые градиенты nothing special anymore.

+0

У меня есть Matlab R2014a. – CroCo

+0

@CroCo Это облом. Затем вам нужно ответить на вопрос [Benoits] (http://stackoverflow.com/a/32059466/2605073) или, если вы не хотите использовать внешние функции, следуйте моей ссылке на [ответ Хоки] (http://stackoverflow.com/a/31699594/2605073). – thewaywewalk

+0

Хороший, я не знал об этом 4-х цветах! –

2

Вы можете использовать подачу patchline из Файлового обмена, в которой вы можете манипулировать объектами линии, как если бы они были объектами патча; т. е. присваивать им значения прозрачности (альфа).

Вот некоторые примеры кода с помощью функции:

clc;clear;close all 

n = 10; 
x = 1:n; 

y1 = rand(1,n); 
y2 = rand(1,n); 
y3 = rand(1,n); 

Y = [y1;y2;y3]; 

linestyles = {'-';'-';'--'}; 
colors = {'r';'k';'b'}; 
alphavalues = [.2 .5 .8]; 

hold on 
for k = 1:3 
    patchline(x,Y(k,:),'linestyle',linestyles{k},'edgecolor',colors{k},'linewidth',4,'edgealpha',alphavalues(k)) 
end 

и выход:

enter image description here

+0

Это не автоматически заполняет значения оси x. В моем случае у меня есть только значения y. Эта функция выдает ошибку. – CroCo

+1

@CroCo 'x' - это просто' x = 1: numel (y) ', не так ли? – thewaywewalk

+0

Этот код похож на мой случай 'x = 0: 0.01: pi; patchline (sin (x)) '. Это выдает ошибку «Индекс превышает размеры матрицы». Если я использую 'plot (sin (x))', ошибки нет. – CroCo