Transparenz für bestimmte Werte in der Matrix mit Gnuplot unter Beibehaltung der Palette?

Hier ist ein interessantes Problem:

Ich habe eine 2D- "Matrix" von binären Daten mit doppelter Genauigkeit, die ich mit Gnuplot zeichnen möchte. Dies ist leicht wie folgt zu tun:

plot "foo.dat" binary array=384x384 format='%double' with image

Der Trick ist, dass bestimmte "Regionen" der Daten einen speziellen Wert haben, z. B. 1234567890.0. Ich möchte, dass diese Elemente vollständig transparent und alle anderen Matrixelemente vollständig undurchsichtig sind. Gibt es eine Möglichkeit, den Transparenzkanal basierend auf den Daten selbst festzulegen?

Ich habe die relevanten Teile der Gnuplot-Dokumentation durchgesehen (Verknüpfung), und ich denke, ich muss das verwendenwith rgbalpha Stil, aber ich bin nicht sicher, wie das zutrifft oder wie man die Transparenz richtig abbildet.

Ich habe mir auch diese Beispiele angesehen (Verknüpfung), aber ich bin nicht sicher, wie ich es anwenden könnte.

Ich frage mich, ob dies in einem Einzeiler (wie oben) möglich ist oder ob ein paar Linien erforderlich sind (wie beim Zeichnen von Konturen über einer binären Matrix).

Danke im Voraus!

AKTUALISIEREN

Ich dachte, ich würde ein paar Beispiele für die Nachwelt geben. In allen Beispielen verwende ich die folgende Präambel:

set title "Basic Plot"   # Or as appropriate
set size square
set palette @MATLAB   # see <http://www.gnuplotting.org/matlab-colorbar-with-gnuplot/>
set cbrange [-100000:100000]    # This cbrange fits my data well enough
                                # I would LOVE an automated way to do this!
val = 1234567890.0      # For missing data

Mein grundlegender Befehl erzeugt Folgendes:

plot "foo.dat" binary array=384x384 format='%double' with image

Ich habe auch versucht, was @Christoph vorschlug: Werte ersetzen gleichval mitNaN:

plot "foo.dat" binary array=384x384 format='%double' \
    using ($1 == val ? NaN : $1) with image

Ich habe versucht mitrgbalpha Um die Transparenz wirklich zu kontrollieren, wird Folgendes erzeugt:

plot "foo.dat" binary array=384x384 format='%double' \
    using 1:1:1:($1 == val ? 0 : 255) with rgbalpha

FAZIT

Die ersten beiden Methoden führen zu ähnlichen Ergebnissen. Das erste ist schlecht, weil es die Farbkarte mit falschen Maxima durcheinander bringt. Der erste und zweite Mangel besteht darin, dass sie tatsächlich keine Transparenz erzielen ("undefinierte" Werte in Gnuplot werden nicht automatisch transparent gemacht). Letzteres ist insofern großartig, als es die Transparenz steuert, aber es ist in Graustufen und verwendet das nicht@MATLAB Palette, wie ich es will.

Wenn jemand alle Einträge gleich veranlassen kannval transparent seinund Wenn die Farbkarte korrekt funktioniert, akzeptiere ich ihre Antwort.

*** Wohin als nächstes ****

Die Gnuplot-Dokumentation erwähnt dieset datafile missing Befehl (Verknüpfung). Dies sieht vielversprechend aus, scheint jedoch nur für spaltenbasierte Daten zu funktionieren, nicht für Binärdateien.

Ich stelle mir vor, der beste Weg, meine ursprüngliche Frage zu beantworten, besteht darin, eine Reihe von Funktionen einzurichten, um eine bestimmte Palette für jede "Spalte" der rgbalpha-Methode zu imitieren.

red(z)   = <stuff>
green(z) = <stuff>
blue(z)  = <stuff> 
plot "foo.dat" binary array=384x384 format='%double' \
    using red($1):green($1):blue($1):($1 == val ? 0 : 255) with rgbalpha

Bonuspunkte, wenn diese Funktionen irgendwie auf die aktuelle Palette verweisen, sodass die Besonderheiten einer Palette in diesen drei Funktionen nicht fest programmiert sind. :-)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage