Używam Ezpolar funkcja w celu wykreślenia niektórych grafik. Trzy z nich mają wartość maksymalną 4, ale ostatnia ma tylko trochę więcej niż 2.
Kiedy je kreślę, ostatni jest wykreślany z jego funkcją nad nim (wydaje się, jakby ezpolar
maluje niektóre piksele po maksymalnej wartości użytej jako promień).
Kod i wygenerowana fabuła
% This subplot is used since I"ve 4 graphics to draw.
subplot(2,2,4)
ezpolar("0.25*(5 - 4*cosd(-180 * sin(t) ))");
title("D")
Jeśli nie korzystam z tego wątku, użyj kompletnego figure
narysować grafikę wydaje się w porządku. Ponieważ jednak muszę mieć wszystkie cztery razem, powoduje to (narysuje tylko problematyczną, subplot 2,2,4
):
Jak widzisz, r = 0.25 (5 - 4...)
jest wykreślony tuż nad osiami biegunowymi.
Dlaczego tak się dzieje? Jak mogę to naprawić?
Odpowiedzi:
1 dla odpowiedzi № 1Wydaje się, że problem dotyczy pozycji tej adnotacji i faktu, że podczas używania a subplot
, granice promienia wykresu biegunowego faktycznie się zmieniają, ale pozycja adnotacji nie.
Aby temu przeciwdziałać, można faktycznie obliczyć granice osi i zmienić położenie tekstu, aby było wyraźnie poza polem.
hax = subplot(2,2,4);
p = ezpolar("0.25*(5 - 4*cosd(-180 * sin(t) ))");
% Get the handle to the label text object
label = findobj(hax, "type", "text");
% Figure out the current axes limits
ylims = get(hax, "ylim");
% Add some padding (as a percent) to the position
padding = 0.2;
set(label, "Position", [0 ylims(1)*(1 + padding), 0]);
Lepszym sposobem na to jest zmiana Units
etykiety do użycia Normalized
jednostki (względem osi), a nie Data
jednostki. W ten sposób nie zmieni się, jeśli ograniczenia osi ulegną zmianie.
hax = subplot(2,2,4);
p = ezpolar("0.25*(5 - 4*cosd(-180 * sin(t) ))");
% Get the handle to the label text object
label = findobj(hax, "type", "text");
set(label, "Units", "Normalized", "Position", [0.5, -0.2]);