2016-03-21 23 views
1

Ich habe einen Datensatz mit Winkelbereichen, die ich als Polardiagramm darstellen möchte. Das Format ist wie folgt:Gnuplot: Polardiagramm mit variablen Bereichen

[Radius]\t[Range 1 lower] [Range 1 upper]\t[Range 2 lower] [Range 2 upper]... 

Eine typische Datenleitung wie folgt aussieht:

1.181 0 0 31.8196 38.3883 141.612 148.18 180 180 211.82 218.388 321.612 328.18 

Die Anzahl der Bereiche pro Zeile unterschiedlich sein können, gibt es auch Linien ohne Bereiche. Idealerweise würde ich gerne eine Polardarstellung erhalten, bei der bei einem gegebenen Radius der Winkel zwischen der unteren und oberen Grenze jedes Bereichs ausgefüllt ist, während der Rest der Darstellung leer ist.

Die Bereiche überschneiden sich nicht, aber einige von ihnen haben denselben Winkel wie untere und obere Grenze (zum Beispiel der "0 0" -Bereich im obigen Beispiel), was (wie immer) noch sichtbar sein sollte Einpunkt und kaum sichtbare Details in der Berechnung entpuppten sich als diejenigen, die im Experiment beobachtet wurden ...

Für jetzt habe ich das C-Programm geändert, das diese Bereiche ausgibt, um mir eine Wolke von Punkten mit Polarkoordinaten zu geben Ich zeichne mit Punkten, aber ich würde wirklich eine Art vektoriellen Plot mit gefüllten Bereichen bevorzugen, da dies (viel) niedrigere Dateigröße bedeuten würde, und würde Zoomen ermöglichen ...

Jede Hilfe wäre willkommen, Danke im Voraus,
Andreas

+0

Können Sie ein Update geben? Haben Sie eine gnuplot-Lösung gefunden oder sind für einen anderen Soft-Plot oder eine andere Datenausgabe gegangen? – Joce

+0

Danke für Ihren Vorschlag. Ich war unterdessen mit einem anderen Projekt beschäftigt, also entschied ich mich, die "Wolke der Punkte" -Lösung für den Moment zu behalten. Dennoch wird Ihre Antwort sehr nützlich sein, sobald ich darauf zurückkomme, aufgrund der besonderen Natur der Daten, die ich zeichnen möchte - die Bereiche nehmen monoton mit dem Radius zu, etwas, an das ich nicht gedacht habe, als ich die Frage stellte. Das bedeutet, dass ich die Punktewolke (zumindest) auf eine Liste von Bereichen für eine bestimmte Anzahl von Radien reduzieren kann. Wie auch immer, deine Idee, ein SVG direkt zu schreiben, klingt auch ziemlich verlockend, da ich bereits die Eckpunktkoordinaten habe. – soulsource

Antwort

0

Es gibt rein gnuplot 4.4+ Lösungen, aber sie werden kompliziert sein. Ein Grund ist, dass das polare Plotten von Datendateien nicht mit polarer Interpolation, sondern mit linearer Interpolation (gerade Linien zwischen den Endpunkten) erfolgt. Ich möchte lieber, dass das C-Programm die gnuplot-Befehle ausgibt, um Ihre Daten direkt zu plotten, z.

set polar 
set angles degrees 
plot (t<38.3883&t>31.8196)?1.181:1/0 with filledcurves above r=0, \ 
    (t<... 

rate ich würde die 0-Range-Fälle separat mit set arrow from 0,0 to r*cos(angle),r*sin(angle) zu behandeln.

Ich bin nicht sicher, dass die Datei so viel kleiner sein wird, gnuplot wird wiederum eine Polylinie erzeugen, um den Kreisbogen bei r=1.181 anzunähern. Wenn Sie eine kleine Datei mit tatsächlichen Kreisbögen wünschen, können Sie SVG-Code direkt aus Ihrem C-Code generieren.