Mathematica: MatrixPlot, Farbe < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) überfällig | Datum: | 10:37 Mo 04.07.2011 | Autor: | danm357 |
Liebe Forengemeinde,
Ich versuche mit Mathematica 8.0, mir die Werte einer Matrix farbig darstellen zu lassen. Dazu wird den Werten der Matrix eine Farbe (automatisch) zugeordnet und die Werte werden an den Positionen, die den Indices der Matrix entsprichen, geplottet.
Nun habe ich ein Problem mit dem Farbverlauf, den ich für diesen sogenannten MatrixPlot verwende.
Hier ein kleines Beispiel zur Illustration:
Ich generiere die Matrix s mit:
s=Table[i*j,{i,10},{j,10}];
die dann folgendermassen ausschaut:
MatrixForm[s]
erste Zeile: Werte von 1 bis 10
zweite Zeile: Werte von 2 bis 20
dweite Zeile: Werte von 3 bis 30 etc.
Geplottet wird das ganze momentan mit:
Needs["PlotLegends'"]
ShowLegend[MatrixPlot[s,PlotRange->{{0,10},{0,10},All},AspectRatio->1/1,ColorFunction->(ColorData["Rainbow"][#1]&),ColorFunctionScaling->True],{ColorData["Rainbow"][1-#1]&,20,ToString[100],ToString[1],LegendPosition->{1.1,-0.4}}]
Vergleicht man nun den Inhalt der Matrix (und den Farbbalken) mit dem Plot, so stellt man fest, dass der Plot nicht so ganz zum Inhalt passt.
Z.B.: die linke obere Ecke der Matrix hat kleine Werte von 1 bis ca. 10. Diese sollten nach Farbbalken eher im lila/blauen Bereich liegen und nicht im grünen. Grün entspräche wohl eher den Werten um die 50.
Würde also jemand bloss den Plot und nicht die Werte der Matrix anschauen, würde er vermuten, dass in der Matrix bloss Werte grösser als 50 vorkommen.
Wähle ich ColorFunctionScaling->False statt True, sehe ich seltsamerweise nur noch einen durchgehend roten Plot, was ich leider gar nicht mehr nachvollziehen kann.
Kann mir vielleicht hier jemand erklären, ob ich was falsch mache oder falsch sehe? Ich hätte schon ganz gerne eine eindeutige Zuordnung der Farben zu den Werten meiner Matrix, so dass man keine falschen Schlüsse auf den Inhalt der Matrix zieht.
Kann mir bei der Gelegenheit auch jemand mitteilen, ob man eigene Farbverläufe in Mathematica generieren kann? Der Farbverlauf "Rainbow" kommt zwar schon nahe an das gewünschte, aber lieber hätte ich es, dass der Farbverlauf mit weiss statt lila startet...
Aber das ist nur kosmetische Nebensache...
Über jede kleine Hilfe würde ich mich freuen!
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 15:16 Mo 04.07.2011 | Autor: | danm357 |
Liebe Forengemeinde,
nach mühsamer Arbeit, konnte ich den ersten Teil meines Problems selber lösen. Man erhält eine eindeutige Zuordnung der Farben zu den Werten der Matrix, wenn man im MatrixPlot folgendes schreibt:
Needs["PlotLegends'"]
ShowLegend[MatrixPlot[s,PlotRange->{{0,10},{0,10},All},AspectRatio->1/1,ColorFunction->(ColorData["Rainbow"][Rescale[#1,{0,100}]]&),ColorFunctionScaling->False],{(ColorData["Rainbow"][1-#1]&),20,ToString[100],ToString[0],LegendPosition->{1.1,-0.4}}]
Der Trick ist also einfach eine Reskalierung der Farbskala auf die vorhandenen Werte in der Matrix.
Leider kann ich aber noch nicht mein zweites Problem lösen. Ich würde gerne eine andere Farbskala verwenden, am besten meine eigene, da mir all die, die man in Mathematica in der Hilfe unter ColorSchemes finden kann, nicht zusagen.
Ich hoffe also noch auf ein paar Ideen bezüglich dieses Problems!
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:51 Mi 06.07.2011 | Autor: | danm357 |
Liebe Forengemeinde,
nach etwas mühsamer Arbeit, habe ich nun endlich rausgefunden, wie man in Mathematica einen eigenen Farbverlauf erzeugen kann.
Damit anderen vielleicht einmal diese Mühen erspart bleiben, stelle ich meine Lösung nun hier rein:
Erzeugt wird der Farbverlauf mit, z.B:
mycolorfun=Function[Blend[{Green,Yellow,Blue},#]];
Der Plot wird dann erzeugt mit:
ShowLegend[MatrixPlot[s,PlotRange->{{0,10},{0,10},All},AspectRatio->1/1,ColorFunction->(mycolorfun[Rescale[#1,{1,100}]]&),ColorFunctionScaling->False],{mycolorfun[Rescale[(1-#1)*100,{1,100}]]&,20,ToString[100],ToString[1],LegendPosition{1.1,-0.4}}]
Wie kann man nun als Autor die Frage als beantwortet abhaken?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:20 Do 04.08.2011 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|