Archiv verlassen und diese Seite im Standarddesign anzeigen : x% einer Zelle farbig machen?
Hallo,
mit \cellcolor kann ich ja einer Zelle in einer Tabelle einen farbigen Hintergrund zuweisen.
Ist es irgendwie möglich, z.b. nur 65% der Zelle einzufärben? Bzw. einen Verlauf mit hartem wechsel von Farbe zu weiß?. (egal welches Pakt ich dazu brauchen würde).
Schönen Gruß
suell
Ich nehme mal an, du möchtest so etwas wie die Excel-Funktion zu schnellen Übersicht über die Größe von Zahlen in einzelnen Zellen. Prinzipiell lässt sich das mit TikZ/pgf bewerkstelligen. Zwei Lösungen (auch eine ohne TikZ) sind hier beschrieben:
Partially coloring cell background to fake histogram (http://tex.stackexchange.com/q/81994/17198)
Hallo,
ja das ist genau, was ich suche.
Allerdings blick ich da noch niht so durch ;).
Wie bekomme ich es beim ersten Beispiel denn hin, dass dieser Balken nur in der dritten Zelle angezeigt wird?
Das zweite Beispiel läuft bei mir leider nicht, so dass ich es hier noch nicht versuchen konnte es anzupassen.
Mach doch mal bitte ein kurzes Beispiel (http://www.minimalbeispiel.de/mini.html) wie die Tabelle aussieht, mit Kommentaren wo du dir das wie vorstellst!
Hi,
die für die hhier eingefärbten Zellen sollen diese Balken angewandt werden, sodass der kleinste Wert nicht eingefärbt ist und der höchste komplett.
Viele Grüße
suell
\documentclass[a4paper,12pt,bibliography=totoc,listof=totoc]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage{color,colortbl}
\definecolor{Grau}{gray}{0.7}
\begin{document}
\begin{table}[htbp]
\centering
\begin{tabular}{rrrr}
\toprule
\multicolumn{1}{c}{a} & \multicolumn{1}{c}{b} & \multicolumn{1}{c}{c} & \multicolumn{1}{c}{d} \\
\midrule
0,1 & 0,1 & \cellcolor{Grau}402,2262896 & 0,1 \\
0,2 & 0,2 & \cellcolor{Grau}403,8168396 & 0,2 \\
0,3 & 0,3 & \cellcolor{Grau}405,2878883 & 0,3 \\
0,4 & 0,4 & \cellcolor{Grau}406,644184 & 0,4 \\
0,5 & 0,5 & \cellcolor{Grau}407,9090581 & 0,5 \\
0,6 & 0,6 & \cellcolor{Grau}409,091184 & 0,6 \\
0,7 & 0,7 & \cellcolor{Grau}410,1818883 & 0,7 \\
0,8 & 0,8 & \cellcolor{Grau}411,1578396 & 0,8 \\
0,9 & 0,9 & \cellcolor{Grau}411,9877732 & 0,9 \\
1 & 1 & \cellcolor{Grau}412,5694279 & 1 \\
\bottomrule
\end{tabular}%
\caption{Test}
\label{tab:Test}%
\end{table}%
\end{document}
Hier mal ein Beispiel mit einigen Anpassungen von mir. Beachte die Kommentare im LAtex-Code!
\documentclass[paper=a4, fontsize=12pt, bibliography=totoc, listof=totoc]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage[table]{xcolor} % statt color UND colortbl
\definecolor{Grau}{gray}{0.7}
% Code von tex.sx
\usepackage{tikz,array,collcell}
\usetikzlibrary{calc}
\pgfdeclarelayer{background}
\pgfdeclarelayer{main}
\pgfsetlayers{background,main}
\newif\ifnegativeValues
\newcommand{\tikzMe}[1]{%
\tikz[baseline]{
\node[anchor=base,text width=\minWidth,align=\alignment,inner sep=0pt,inner xsep=\tabcolsep,outer sep=0pt] (n) {\strut$#1$};
\begin{pgfonlayer}{background}
\ifnegativeValues
\pgfmathparse{#1<0?"red!50":"Grau"} % hier Grau statt green!25
\edef\color{\pgfmathresult}
\else
\def\color{Grau} % hier Grau statt green!25
\fi
\pgfmathparse{abs((#1-\minValue)/(\maxValue-\minValue))}
\fill[color=\color] (n.north west) rectangle ($(n.south west)!\pgfmathresult!(n.south east)$);
\end{pgfonlayer}
}
}
%\negativeValuestrue % inserts a minus sign for the minWidth and use red for negative values
\negativeValuesfalse % doesn't insert a minus sign, uses only green
\newcolumntype{H}[3]{%
%@{} % nutze normalen tabcolsep
>{%
\ifx\\#1\\\def\alignment{right}\else\def\alignment {#1}\fi%
\ifnegativeValues\def\minValue{0.}\else\def\minVal ue{#2}\fi%
\def\maxValue{#3}%
\def\minWidth{\widthof{$\ifnegativeValues-\fi#3$}}%
\collectcell\tikzMe%
}c<{\endcollectcell}
%@{} % nutze normalen tabcolsep
}
\begin{document}
\begin{table}[htbp]
\centering
\caption{nur 1 Spalte grau} % TabellenÜBERschrift
\label{tab:Test}%
\begin{tabular}{rr>{\cellcolor{Grau}}rr}
\toprule
\multicolumn{1}{c}{a} & \multicolumn{1}{c}{b} & \multicolumn{1}{c}{c} & \multicolumn{1}{c}{d} \\
\midrule
0,1 & 0,1 & 402,2262896 & 0,1 \\
0,2 & 0,2 & 403,8168396 & 0,2 \\
0,3 & 0,3 & 405,2878883 & 0,3 \\
0,4 & 0,4 & 406,644184 & 0,4 \\
0,5 & 0,5 & 407,9090581 & 0,5 \\
0,6 & 0,6 & 409,091184 & 0,6 \\
0,7 & 0,7 & 410,1818883 & 0,7 \\
0,8 & 0,8 & 411,1578396 & 0,8 \\
0,9 & 0,9 & 411,9877732 & 0,9 \\
1 & 1 & 412,5694279 & 1 \\
\bottomrule
\end{tabular}%
\end{table}%
\begin{table}[htbp]
\centering
\caption{mit TikZ zur Einfärbung nach Zahlenwert}
\label{tab:Test}%
\begin{tabular}{rrH{}{402.2262896}{412.5694279}r}
\toprule
\multicolumn{1}{c}{a} & \multicolumn{1}{c}{b} & \multicolumn{1}{c}{c} & \multicolumn{1}{c}{d} \\
\midrule
0,1 & 0,1 & 402.2262896 & 0,1 \\
0,2 & 0,2 & 403.8168396 & 0,2 \\
0,3 & 0,3 & 405.2878883 & 0,3 \\
0,4 & 0,4 & 406.644184 & 0,4 \\
0,5 & 0,5 & 407.9090581 & 0,5 \\
0,6 & 0,6 & 409.091184 & 0,6 \\
0,7 & 0,7 & 410.1818883 & 0,7 \\
0,8 & 0,8 & 411.1578396 & 0,8 \\
0,9 & 0,9 & 411.9877732 & 0,9 \\
1 & 1 & 412.5694279 & 1 \\
\bottomrule
\end{tabular}%
\end{table}%
\end{document}
Allerdings funktioniert es soweit erst einmal nur mit einem Punkt als Dezimaltrenner. In den pgfmathparse-Optionen stecke ich noch nicht genug drin, um das noch zu ändern.
Hi,
ah das sieht schonmal sehr gut aus. Vielen Dank
Natürlich habe ich mein Minimalbeispiel zu minimal gemacht..
In der Spalte, die eingefärbt werden soll, stehen keine Zahlen sondern Prozentwerte. Gibt es da eine Möglichkeit, diese zu ignorieren für die Farbbalkenberechnung zu igonieren, sie aber in der Tabelle mit anzuzeigen?
Ansonsten könnte man sicherlich eine Spalte nur mit % Zeichen direkt daneben klatschen oder?
Siehe im Beispiel unten in Spalte 2.
Falls da noch wer anders weiterweiß mit dem Punkt statt Komma, Ideen noch gerne gesucht ;)
\documentclass[paper=a4, fontsize=12pt, bibliography=totoc, listof=totoc]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage[table]{xcolor} % statt color UND colortbl
\definecolor{Grau}{gray}{0.7}
% Code von tex.sx
\usepackage{tikz,array,collcell}
\usetikzlibrary{calc}
\pgfdeclarelayer{background}
\pgfdeclarelayer{main}
\pgfsetlayers{background,main}
\newif\ifnegativeValues
\newcommand{\tikzMe}[1]{%
\tikz[baseline]{
\node[anchor=base,text width=\minWidth,align=\alignment,inner sep=0pt,inner xsep=\tabcolsep,outer sep=0pt] (n) {\strut$#1$};
\begin{pgfonlayer}{background}
\ifnegativeValues
\pgfmathparse{#1<0?"red!50":"Grau"} % hier Grau statt green!25
\edef\color{\pgfmathresult}
\else
\def\color{Grau} % hier Grau statt green!25
\fi
\pgfmathparse{abs((#1-\minValue)/(\maxValue-\minValue))}
\fill[color=\color] (n.north west) rectangle ($(n.south west)!\pgfmathresult!(n.south east)$);
\end{pgfonlayer}
}
}
%\negativeValuestrue % inserts a minus sign for the minWidth and use red for negative values
\negativeValuesfalse % doesn't insert a minus sign, uses only green
\newcolumntype{H}[3]{%
%@{} % nutze normalen tabcolsep
>{%
\ifx\\#1\\\def\alignment{right}\else\def\alignment {#1}\fi%
\ifnegativeValues\def\minValue{0.}\else\def\minVal ue{#2}\fi%
\def\maxValue{#3}%
\def\minWidth{\widthof{$\ifnegativeValues-\fi#3$}}%
\collectcell\tikzMe%
}c<{\endcollectcell}
%@{} % nutze normalen tabcolsep
}
\begin{document}
\begin{table}[htbp]
\centering
\caption{mit TikZ zur Einfärbung nach Zahlenwert}
\label{tab:Test}%
\begin{tabular}{rrH{}{402.2262896}{412.5694279}r}
\toprule
\multicolumn{1}{c}{a} & \multicolumn{1}{c}{Prozentwerte} & \multicolumn{1}{c}{c} & \multicolumn{1}{c}{d} \\
\midrule
0,1 & 0.1\% & 402.2262896 & 0,1 \\
0,2 & 0.2\% & 403.8168396 & 0,2 \\
0,3 & 0.3\% & 405.2878883 & 0,3 \\
0,4 & 0.4\% & 406.644184 & 0,4 \\
0,5 & 0.5\% & 407.9090581 & 0,5 \\
0,6 & 0.6\% & 409.091184 & 0,6 \\
0,7 & 0.7\% & 410.1818883 & 0,7 \\
0,8 & 0.8\% & 411.1578396 & 0,8 \\
0,9 & 0.9\% & 411.9877732 & 0,9 \\
1 & 1\% & 412.5694279 & 1 \\
\bottomrule
\end{tabular}%
\end{table}%
\end{document}
Okay die Zahlenformatierung habe ich hinbekommen (allerdings noch nicht für Prozentwerte):
\documentclass[paper=a4, fontsize=12pt, bibliography=totoc, listof=totoc,%
% captions=nooneline % statt flushleft-Umgebung in captions!!!
]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage[table]{xcolor} % statt color UND colortbl
\definecolor{Grau}{gray}{0.7}
% Code von tex.sx
\usepackage{tikz,array,collcell}
\usetikzlibrary{calc}
\pgfkeys{/pgf/number format/.cd, use comma,1000 sep={}, precision=7} % Formatvorgabe für \pgfmathprintnumber, siehe pgfmanual.pdf S. 546 ff.
\pgfdeclarelayer{background}
\pgfdeclarelayer{main}
\pgfsetlayers{background,main}
\newif\ifnegativeValues
\newcommand{\tikzMe}[1]{%
\tikz[baseline]{
\node[anchor=base,text width=\minWidth,align=\alignment,inner sep=0pt,inner xsep=\tabcolsep,outer sep=0pt] (n) {\strut\pgfmathprintnumber{#1}}; % hier wird die Zahl formatiert
\begin{pgfonlayer}{background}
\ifnegativeValues
\pgfmathparse{#1<0?"red!50":"Grau"} % hier Grau statt green!25
\edef\color{\pgfmathresult}
\else
\def\color{Grau} % hier Grau statt green!25
\fi
\pgfmathparse{abs((#1-\minValue)/(\maxValue-\minValue))}
\fill[color=\color] (n.north west) rectangle ($(n.south west)!\pgfmathresult!(n.south east)$);
\end{pgfonlayer}
}
}
%\negativeValuestrue % inserts a minus sign for the minWidth and use red for negative values
\negativeValuesfalse % doesn't insert a minus sign, uses only green
%column H takes three arguments: #1 = alignment (default right), #2 = minimal value, #3 = maximal value
\newcolumntype{H}[3]{%
%@{} % normalen tabcolsep
>{%
\ifx\\#1\\\def\alignment{right}\else\def\alignment {#1}\fi%
\ifnegativeValues\def\minValue{0.}\else\def\minVal ue{#2}\fi%
\def\maxValue{#3}%
\def\minWidth{\widthof{$\ifnegativeValues-\fi#3$}}%
\collectcell\tikzMe%
}c<{\endcollectcell}
%@{} % normalen tabcolsep
}
\begin{document}
\begin{table}[htbp]
\centering
\caption{mit TikZ-Balken, Balkenlänge nach Zahlenwert}
\label{tab:Test2}%
\begin{tabular}{rH{}{0.0}{1.0}H{}{402.2262896}{412 .5694279}r}
\toprule
\multicolumn{1}{c}{a / min} & \multicolumn{1}{c}{Werte / \%} & \multicolumn{1}{c}{c / MHz} & \multicolumn{1}{c}{d / kg} \\
\midrule
0,1 & 0.1 & 402.2262896 & 0,1 \\
0,2 & 0.2 & 403.8168396 & 0,2 \\
0,3 & 0.3 & 405.2878883 & 0,3 \\
0,4 & 0.4 & 406.644184 & 0,4 \\
0,5 & 0.5 & 407.9090581 & 0,5 \\
0,6 & 0.6 & 409.091184 & 0,6 \\
0,7 & 0.7 & 410.1818883 & 0,7 \\
0,8 & 0.8 & 411.1578396 & 0,8 \\
0,9 & 0.9 & 411.9877732 & 0,9 \\
1 & 1.0 & 412.5694279 & 1 \\
\bottomrule
\end{tabular}%
\end{table}%
\end{document}
Da das Prozentzeichen aber auch so eine Art (sich wiederholende) Einheit ist, würde ich es auch durchaus in den Tabellenkopf setzen.
Du hast recht, das % Zeichen kann auch in den Kopf bzw. steht eh schon da, dann brauche ich es nicht immer wiederholen.
Sieht genau aus, wie ich es brauche. Super und Danke!
Ah mir ist noch was aufgefallen.
Wenn ich eine Zahl mit festen Kommastellen habe, z.B. 0,100 werden die hinteren Nullen abgeschnitten, sodass nur noch 0,1 angezeigt wird. Kann man da noch was machen?
schöne grüße
Das geht bei der Angabe der Zahlenformatierung mit fester Anzahl der Nachkommastellen:
\pgfkeys{/pgf/number format/.cd, use comma, 1000 sep={}, precision=3, fixed zerofill}
% Formatvorgabe für \pgfmathprintnumber, siehe pgfmanual.pdf S. 546 ff.
Hey,
das ging ja mal wieder schnell :).
Jau jetzt füllt er das immer auf. Allerdings mit einer festen precision.
So eine allerletzte Frage, wie bekomme ich es jetzt hin, dass er in der einen Spalte auf 2 Stellen rundet und in der anderen auf 4?
Könntest du mir da noch ein letztes Mal weiterhelfen? Da ich am Montag meine Arbeit abgeben muss, hab ich den Kopf gerade ziemlich voll, sodass ich da in der Anleitung nicht durchblicke/keine Zeit habe, mich reinzuarbeiten.
Vielen Dank!
So, hier die finale (?) Version:
\documentclass[paper=a4, fontsize=12pt, bibliography=totoc, listof=totoc ]{scrreprt}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{booktabs}
\usepackage[table]{xcolor} % statt color UND colortbl
\definecolor{Grau}{gray}{0.7}
% Code von tex.sx
\usepackage{tikz,array,collcell}
\usetikzlibrary{calc}
\pgfdeclarelayer{background}
\pgfdeclarelayer{main}
\pgfsetlayers{background,main}
\newif\ifnegativeValues
\newcommand{\tikzMe}[1]{%
\tikz[baseline]{
\node[anchor=base,text width=\minWidth,align=\alignment,inner sep=0pt,inner xsep=\tabcolsep,outer sep=0pt] (n) {\strut\pgfmathprintnumber{#1}}; % hier wird die Zahl formatiert
\begin{pgfonlayer}{background}
\ifnegativeValues
\pgfmathparse{#1<0?"red!50":"Grau"} % hier Grau statt green!25
\edef\color{\pgfmathresult}
\else
\def\color{Grau} % hier Grau statt green!25
\fi
\pgfmathparse{abs((#1-\minValue)/(\maxValue-\minValue))}
\fill (n.north west) rectangle ($(n.south west)!\pgfmathresult!(n.south east)$);
\end{pgfonlayer}
}
}
%\negativeValuestrue % inserts a minus sign for the minWidth and use red for negative values
\negativeValuesfalse % doesn't insert a minus sign, uses only green
[COLOR="Red"]% H-Spalte hat 3 Argumente (Anpassung von mir):
% #1 = Anzahl Nachkommastellen, #2 = Minimalwert, #3 = Maximalwert
\newcolumntype{H}[3]{%
%@{} % normalen tabcolsep
>{%
\pgfkeys{/pgf/number format/.cd, use comma, 1000 sep={}, precision=#1, fixed, fixed zerofill}%
\def\alignment{right}%
\ifnegativeValues\def\minValue{0.}\else\def\minVal ue{#2}\fi%
\def\maxValue{#3}%
\def\minWidth{\widthof{$\ifnegativeValues-\fi#3$}}%
\collectcell\tikzMe%
}c<{\endcollectcell}
%@{} % normalen tabcolsep
}
\begin{document}
\begin{table}[htbp]
\centering
\caption{mit TikZ-Balken, Balkenlänge nach Zahlenwert}
\label{tab:Test2}%
\begin{tabular}{rH{2}{0.0}{1.0}H{4}{402.000}{412.6 000}r}
\toprule
\multicolumn{1}{c}{a / min} & \multicolumn{1}{c}{Werte / \%} & \multicolumn{1}{c}{c / MHz} & \multicolumn{1}{c}{d / kg} \\
\midrule
0,1 & 0.1 & 402.2262896 & 0,1 \\
0,2 & 0.2 & 403.8168396 & 0,2 \\
0,3 & 0.3 & 405.2878883 & 0,3 \\
0,4 & 0.4 & 406.644184 & 0,4 \\
0,5 & 0.5 & 407.9090581 & 0,5 \\
0,6 & 0.6 & 409.0911840 & 0,6 \\
0,7 & 0.7 & 410.1818883 & 0,7 \\
0,8 & 0.8 & 411.1578396 & 0,8 \\
0,9 & 0.9 & 411.9877732 & 0,9 \\
1 & 1.0 & 412.5694279 & 1 \\
\bottomrule
\end{tabular}%
\end{table}%
\end{document}
Ich habe die pgfkeys-Answeiung mit der Einstellung für die Zahlenformatierung in die Spaltendefinition mit reingepackt. Das erste Argument ist jetzt die Anzahl der Nachkommastellen; die Ausrichtung ist immer rechtsbündig.
Ja jetzt endlich final - lecker. Vielen Dank.
Hi,
wenn ich als letzte Tabellenzeile folgendes einfüge, hat der Balken in der dritten Spalte die falsche Länge:
0,8 & 0.05 & 400.1578396 & 0,8 \\
Ja, das stimmt! Man muss zwingend selbst die Minimal- und Maximalwerte pro Spalte raussuchen und als Parameter übergeben, damit die Berechnung (richtig) funktioniert:
\pgfmathparse{abs((#1-\minValue)/(\maxValue-\minValue))}Diese Limitierung hat auch schon die ursprüngliche Lösung (http://tex.stackexchange.com/a/81998/17198).
Aktuell habe ich auch keine Idee, wie man das lösen könnte. Es müssten ja mind. 2 Durchgänge notwendig sein, wobei man erstmal alle Werte pro Spalte parst, um die Min/Max-Werte zu bestimmen.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.