Nuestro team de trabajo ha estado horas investigando para dar resolución a tus preguntas, te dejamos la resolución y nuestro objetivo es resultarte de gran apoyo.
Solución:
Para la versión Matlab > R2014b
Desde la versión R2014b, Matlab ha modificado la estructura de sus componentes gráficos. Aquí está el código actualizado que usa Matlab anotaciones.
es producido por
headWidth = 8;
headLength = 8;
LineLength = 0.08;
%some data
[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;
%quiver plots
figure('Position',[10 10 1000 600],'Color','w');
hax_1 = subplot(1,2,1);
hq = quiver(x,y,u,v); %get the handle of quiver
title('Regular Quiver plot','FontSize',16);
%get the data from regular quiver
U = hq.UData;
V = hq.VData;
X = hq.XData;
Y = hq.YData;
%right version (with annotation)
hax_2 = subplot(1,2,2);
%hold on;
for ii = 1:length(X)
for ij = 1:length(X)
headWidth = 5;
ah = annotation('arrow',...
'headStyle','cback1','HeadLength',headLength,'HeadWidth',headWidth);
set(ah,'parent',gca);
set(ah,'position',[X(ii,ij) Y(ii,ij) LineLength*U(ii,ij) LineLength*V(ii,ij)]);
end
end
%axis off;
title('Quiver - annotations ','FontSize',16);
linkaxes([hax_1 hax_2],'xy');
Tenga en cuenta que este fragmento de código cambia el estilo del encabezado y controla la longitud de la línea (en el panel izquierdo, puede ver que las flechas se superponen en la parte superior izquierda de la subparcela izquierda, mientras que no en la subparcela derecha). ). La longitud y el ancho de las puntas de flecha no se modifican.
Para esta edición, no mantuve el esquema de colores que codificaba para el ángulo y descarté el tamaño dinámico de la cabeza. Hace las cosas más claras.
Para la versión de Matlab
Los diagramas de carcaj son difíciles de modificar. Como dijo @Luis Mendo, puede modificar la función quiver dentro de la instalación de matlab. Sin embargo, aún estará limitado por la complejidad de dibujar flechas mediante programación con parches/líneas agradables. Puede haber una ruta más fácil usando annotation
– ver la trama secundaria “Carcaj – anotación” que establece el headStyle
propiedad a cback1
.
Las anotaciones son objetos gráficos (líneas, cuadros de texto, flechas, …) que se pueden insertar fácilmente a mano una vez que se realiza un gráfico. Muestran texto adicional o apuntan a un área en particular, por ejemplo. También puede insertarlos programáticamente definiendo sus posiciones, y esa es la opción que tomaremos. Primero dibujamos un regular quiver
gráfico (panel izquierdo), obtenga las líneas azules’ X
y Y
y use estas coordenadas para insertar flechas de anotación, cada una de ellas mostrándose exactamente en la misma ubicación (misma posición, mismo ángulo, mismo tamaño; panel derecho).
Las flechas de anotación tienen algunas propiedades agradables que puede modificar fácilmente, como Color
, HeadWidth
, HeadLength
y HeadStyle
. En el siguiente gráfico, modifiqué el color de cada flecha según su ángulo con respecto al eje x, y headWidth
eso depende de la longitud.
la siguiente imagen
es producido por
%some data
[x,y] = meshgrid(0:0.2:2,0:0.2:2);
u = cos(x).*y;
v = sin(x).*y;
%quiver plots
figure('Position',[10 10 1000 600],'Color','w');
hax_1 = subplot(1,2,1);
%left version (regular)
hq1 = quiver(x,y,u,v);
%get the line position (first handle)
hkid = get(hq1,'children');
X = get(hkid(1),'XData');
Y = get(hkid(1),'YData');
axis off;
title('Quiver - regular ','FontSize',16);
%right version (with annotation)
hax_2 = subplot(1,2,2);
cmap = jet(116); %colormap, 116 because angles goes up to 115 degrees
for ii = 1:3:length(X)-1
headWidth = 200 * sqrt((X(ii+1)-X(ii)).^2 + (Y(ii+1)-Y(ii)).^2); % set the headWidth, function of length of arrow
angled = floor(atan2(Y(ii+1)-Y(ii),X(ii+1)-X(ii))*180/pi) + 1; %get the angle
ah = annotation('arrow',...
'Color', cmap(angled,:),...
'headStyle','cback1','HeadLength',50,'HeadWidth',headWidth);
set(ah,'parent',gca);
set(ah,'position',[X(ii) Y(ii) X(ii+1)-X(ii) Y(ii+1)-Y(ii)]);
end
axis off;
title('Quiver - annotations ','FontSize',16);
linkaxes([hax_1 hax_2],'xy');
El archivo refresh.m
ubicado en la carpeta ...MATLAB...toolboxmatlabspecgraph@specgraph@quivergroup@quivergroup
contiene las siguientes lineas:
%// Arrow head parameters
alpha = .33; %// Size of arrow head relative to the length of the vector
beta = .25; %// Width of the base of the arrow head relative to the length
Cambiando los valores de alpha
y beta
logra el efecto deseado.
Sin embargo, esto implica modificar los archivos de Matlab y, por lo tanto, no se recomienda. Si lo hace, conserve una copia del original. refresh.m
expediente.
Resultados utilizando el código de ejemplo que aparece en quiver
la ayuda de:
[x,y] = meshgrid(-2:.2:2,-1:.15:1);
z = x .* exp(-x.^2 - y.^2); [px,py] = gradient(z,.2,.15);
quiver(x,y,px,py), hold off, axis image
-
Con parámetros originales (
alpha = .33;
beta = .25;
): -
Con
alpha = .5;
beta = .5;
:
Puedes empezar aquí:
http://www.mathworks.com/help/matlab/ref/quiver.html
y luego puede buscar las propiedades disponibles de quiver aquí:
http://www.mathworks.com/help/matlab/ref/quivergroupproperties.html
Por ejemplo, la propiedad MaxHeadSize permite cambiar el tamaño de las puntas de flecha.
EDITAR: Más información en este enlace: Propiedades de flecha
Lea al final, donde dice
Puede seleccionar una anotación y luego elegir Mostrar código M para obtener un fragmento de código que puede insertar en una función o secuencia de comandos para reproducir la anotación.
Si guardas algún pregunta o capacidad de aumentar nuestro post puedes realizar una interpretación y con placer lo ojearemos.