Estoy creando un gráfico de dispersión de algunos datos, como usted, y tengo una serie de puntos de datos repetidos que me gustaría trazar como círculos con algún valor alfa para que se acumulen de puntos extra en el mismo lugar es obvio.Trazar círculos con valores alfa en MATLAB
Por lo que yo puedo decir que no se puede establecer las propiedades alfa de los pequeños círculos que se generan con plot(x, y, 'o')
, así que he recurrido a la elaboración de miles de pequeños círculos usando patch()
a mí mismo:
x = repmat([1:10], [1 10]);
y = round(10*rand(100, 1))/10;
xlim([0 11])
ylim([0 1])
p = ag_plot_little_circles(x', y, 10, [1 0 .4], 0.2);
function p = ag_plot_little_circles(x, y, circle, col, alpha)
%AG_PLOT_LITTLE_CIRCLES Plot circular circles of relative size circle
% Returns handles to all patches plotted
% aspect is width/height
fPos = get(gcf, 'Position');
% need width, height in data values
xl = xlim();
yl = ylim();
w = circle*(xl(2)-xl(1))/fPos(3);
h = circle*(yl(2)-yl(1))/fPos(4);
theta = 0:pi/5:2*pi;
mx = w*sin(theta);
my = h*cos(theta);
num = 0;
for k = 1:max(size(x))
for f = 1:size(y,2)
num = num+1;
p(num) = patch(x(k)+mx, y(k,f)+my, col, 'FaceColor', col, 'FaceAlpha', alpha, 'EdgeColor', 'none');
end
end
end
Como Puede ver, esto no es óptimo, ya que necesito saber y establecer el tamaño de la trama (xlim
y ylim
) antes de trazarlo para que los círculos terminen siendo circulares. Si vuelvo a dar forma a la trama, terminan como óvalos. También termino con millones de objetos, lo cual es un dolor al hacer leyendas.
¿Hay alguna manera más fácil?
se puede añadir una llamada de ejemplo para su función? Sería más fácil no tener que leer en detalle para descubrir la sintaxis ... – abcd
Sí, buena idea. – Alex
Con el nuevo lanzamiento de matlab parece posible, pero aún no está documentado. Ver [aquí] (http://undocumentedmatlab.com/blog/plot-markers-transparency-and-color-gradient) – WYSIWYG