Farbskalierung in Tabelle nach Werten

Tabellen und Grafiken erstellen und anordnen


CollmDante
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 80
Registriert: So 9. Jan 2011, 10:00
Wohnort: Wermsdorf

Farbskalierung in Tabelle nach Werten

Beitrag von CollmDante »

Ich versuche für eine Diplomarbeit in einer Tabelle die Zellfärbung nach den vorliegenden Werten zu berechnen. Die Normierung um Farben zu berechnen habe ich realisiert und soweit ich diese auserhalb der Tabelle anwende funktioniert es auch. Versuche ich aber in der Tabelle, wo der Wert steht die Berechnung durch einen Befehl auszulösen, erhalte ich die Fehlermeldung:
Package xcolor Error: Undefined color `cb'. ...r{ca}20&\settbcolor{-45}\cellcolor{cb}-20&

Mein jetziger Code ist wie folgt:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[table]{xcolor}
\usepackage{fp,fp-upn}
\begin{document}
\newcommand{\twavecolorinit}[5]{ %Initialisierung für Farbskala nach Werten 
 \FPset\amin{#1}% Minimalwert
 \FPset\amax{#2}% Maximalwert
 \FPupn\am{\amax{} \amin{} add 2 div} %Mittelwertberechnung
 \newcommand*{\basecolora}{#3} %Farbe für amin
 \newcommand*{\basecolorb}{#4} %Farbe für am
 \newcommand*{\basecolorc}{#5} %Farbe für amax
 } 
 \twavecolorinit{-50}{50}{red}{green}{blue}
% Berechnung des Farbwertes als Test
\FPset\tw{20} 
 \FPiflt\tw\am%
   \FPupn{tg}{\tw{} \am{} sub \am{} \amin{} sub div -100 mul}
   \FPset\tr{0}
   \FPupn{ty}{100 \tg{} sub}
   \colorlet{ca}{\basecolora!\tg!\basecolorc!\ty!}%
  \else%
   \FPupn{tr}{\tw{} \am{} sub \am{} \amin{} sub div -100 neg mul}
   \FPset\tg{0}
   \FPupn{ty}{100 \tr{} sub}
   \colorlet{ca}{\basecolorb!\tr!\basecolorc!\ty!}
  \fi 

\newcommand{\settbcolor}[1]{\FPset\tw{#1} 
 \FPiflt\tw\am%
   \FPupn{tg}{\tw{} \am{} sub \am{} \amin{} sub div -100 mul}
   \FPset\tr{0}
   \FPupn{ty}{100 \tg{} sub}
   \colorlet{cb}{\basecolora!\tg!\basecolorc!\ty!}%
  \else%
   \FPupn{tr}{\tw{} \am{} sub \am{} \amin{} sub div -100 neg mul}
   \FPset\tg{0}
   \FPupn{ty}{100 \tr{} sub}
   \colorlet{cb}{\basecolorb!\tr!\basecolorc!\ty!}
  \fi }
%\settbcolor{-20}\textcolor{cb}{Farbe für cb} \\ Test für Befehl
 
\begin{tabular}{lll}
\cellcolor{ca}20&\settbcolor{-45}\cellcolor{cb}-20&Test\\
\end{tabular}
\end{document}
Nur mit der Farbe 'ca' würde es gehen, aber damit lässt sich in der Tabelle nicht arbeiten.

Kann mich einer bei der Lösung unterstützen?

Jens
Die Kugel ist der vollendete Kompromiss, sie kann nirgendwo anecken.
Paul Leip

Gast

Beitrag von Gast »

Mit dem \settbcolor wird die Zelle bereits begonnen (auch wenn das nichts ausgibt). Das \cellcolor steht also nicht mehr vor, sondern bereits in der Zelle. Das funktioniert nicht. Am besten wäre wohl, wenn Du Dir für xcolor ein neues Farbschema definierst. Das kannst Du dann bei \cellcolor mit angeben. Alternativ könntest Du alle Farben vor der Tabelle berechnen und dann in der Tabelle nur noch auswählen. Prinzipiell wäre es auch denkbar, ein abgewandeltes \cellcolor nach dem Vorbild der Originaldefinition zu definieren, das dann die Berechnung gleich mit vornimmt.

CollmDante
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 80
Registriert: So 9. Jan 2011, 10:00
Wohnort: Wermsdorf

Beitrag von CollmDante »

Danke für die Antwort, da die Werte jedoch sehr verschieden sind (liegen zwischen 0 und 3) und die Tabelle sehr groß, benötige ich einen Befehl der in der Tabelle nach dem Wert die Zellfarbe steuert. Wie würde das mit einem neuen farbschema funktionieren?
Die Kugel ist der vollendete Kompromiss, sie kann nirgendwo anecken.
Paul Leip

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4268
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Du könntest die Farbdefinition in einem Befehl speichern. Wenn der global ist, kannst du die Berechnung am Ende der vorigen Zelle machen:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[table]{xcolor}
\usepackage{fp,fp-upn}
\usepackage{collcell}
\begin{document}
\newcommand{\twavecolorinit}[5]{ %Initialisierung für Farbskala nach Werten
 \FPset\amin{#1}% Minimalwert
 \FPset\amax{#2}% Maximalwert
 \FPupn\am{\amax{} \amin{} add 2 div} %Mittelwertberechnung
 \newcommand*{\basecolora}{#3} %Farbe für amin
 \newcommand*{\basecolorb}{#4} %Farbe für am
 \newcommand*{\basecolorc}{#5} %Farbe für amax
 }
 \twavecolorinit{-50}{50}{red}{green}{blue}
% Berechnung des Farbwertes als Test
\FPset\tw{20}
 \FPiflt\tw\am%
   \FPupn{tg}{\tw{} \am{} sub \am{} \amin{} sub div -100 mul}
   \FPset\tr{0}
   \FPupn{ty}{100 \tg{} sub}
   \colorlet{ca}{\basecolora!\tg!\basecolorc!\ty!}%
  \else%
   \FPupn{tr}{\tw{} \am{} sub \am{} \amin{} sub div -100 neg mul}
   \FPset\tg{0}
   \FPupn{ty}{100 \tr{} sub}
   \colorlet{ca}{\basecolorb!\tr!\basecolorc!\ty!}
  \fi

\newcommand{\settbcolor}[1]{\FPset\tw{#1}
 \FPiflt\tw\am%
   \FPupn{tg}{\tw{} \am{} sub \am{} \amin{} sub div -100 mul}
   \FPset\tr{0}
   \FPupn{ty}{100 \tg{} sub}
   \xdef\mycolor{\basecolora!\tg!\basecolorc!\ty!}%
  \else%
   \FPupn{tr}{\tw{} \am{} sub \am{} \amin{} sub div -100 neg mul}
   \FPset\tg{0}
   \FPupn{ty}{100 \tr{} sub}
   \xdef\mycolor{\basecolorb!\tr!\basecolorc!\ty!}%
  \fi }

\begin{tabular}{lll}
\cellcolor{ca}20\settbcolor{-45}&\cellcolor{\mycolor}-20&Test\settbcolor{-30}\\
\cellcolor{\mycolor}lblb
\end{tabular}
\end{document}

CollmDante
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 80
Registriert: So 9. Jan 2011, 10:00
Wohnort: Wermsdorf

Beitrag von CollmDante »

Danke das hat mir sehr geholfen.
Ich werde deinen Vorschlag verwenden. Jetzt muss ich meine Farbnormierung nur noch anpassen und dann ist alles rund.

Gruß Jens
Die Kugel ist der vollendete Kompromiss, sie kann nirgendwo anecken.
Paul Leip

Antworten