Ich möchte die Spitzen einer Funktion zu visualisieren, und ich möchte Marker dafür haben über die Linie, die sie zugeordnet sind.MATLAB/Octave Plot Marker über der Linie und nicht auf der Linie
ich fabriziert ein Minimum Beispiel, wo ich die Spitzen bereits haben, ist die Frage, wie die Markierungen richtig sichtbar zu machen:
y = [0.1 0.3 10.0 1.0 0.5 0.1 24.0 0.6 0.1 0.2]
x = (1:length(y))
plot(x,y);
hold on;
peaks = [3 7];
plot(x(peaks), y(peaks), 'v', 'MarkerSize', 24);
print('-dpng', 'example.png', '-S640,480');
So, als Folge erscheinen die Markierungen auf der Linie wie folgt ausgerichtet:
Das Ergebnis, das ich will durch vorsichtiges Einstellen eines Parameters OFFSET
wie dies erreicht werden könnte:
plot(x(peaks), y(peaks)+OFFSET, 'v', 'MarkerSize', 24);
Wie in der folgenden Abbildung gezeigt, funktioniert OFFSET=2.56
für das exportierte PNG, aber mit dem interaktiven Plot und dem Exportieren von Vektorgrafiken ist es wieder falsch.
Kann jemand einen Weg empfehlen, dieses Ergebnis zu erhalten, ohne manuell Versuch/Fehler zu tun zu haben?
Momentan verwende ich Octave mit gnuplot, um nach latex + tikz zu exportieren, und es wäre gut, wenn die Lösung dort funktionieren würde.
In meinem eigentlichen (komplizierteren) Anwendungsfall zeichne ich mehrere Zeilen hintereinander in die gleiche Figur, und die y-Grenzen ändern sich, so dass die Offsets nicht einfach berechnet werden können, da sich die Markergröße nicht ändert die y-Grenzen.
Edit: Zusätzlich verwende ich ein Semilogx-Plot, so dass Linien innerhalb des Diagramms in der X/Y-Achse Skalen würde verzerrt aussehen.
warst du ein bisschen schneller;) –
ein kleines bisschen ... :) – Adiel
Dies funktioniert in octave + gnuplot und ist schon hilfreich, aber jetzt ändert sich das Seitenverhältnis des Dreiecks je nach y und x Grenzen ändern. In meinem realen Anwendungsfall verwende ich sogar eine logarithmische Darstellung, so dass sie vollständig verzerrt wird. Irgendwelche anderen Ideen? ... EDIT: Ok, ich denke ich könnte auch den Marker exponentiell plotten lassen und je nach Achse skalieren, es wird nur ein wenig kompliziert ... – bluesceada