Abstand von zwei vertikalen Multirows verringern

Tabellen und Grafiken erstellen und anordnen


pointloma
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Sa 23. Apr 2016, 16:01

Abstand von zwei vertikalen Multirows verringern

Beitrag von pointloma »

Hallo Forum,

schon mal vorab danke für die Hilfe. Im folgenden Minimalbeispiel seht ihr zwei mal die selbe Tabelle (bis auf andere Zahlenwerte, was aber ziemlich irrelevant ist). Einmal ist Referenzdaten horizontal, einmal vertikal angeordnet.

Bei der horizontalen Anordnung stört mich die Optik durch den großen Freiraum darüber (wie seht ihr das?).
Bei der vertikalen Anordnung stört mich der große Abstand zwischen den beiden Multirows. Ich habe es schon versucht in eine Spalte zu packen, allerdings ist das Wort Referenzdaten dafür zu lange. Mit parbox kann ich zwar einen Umbruch erzwingen, allerdings passt dann die Position des Wortes überhaupt nicht mehr.

Vielleicht habt ihr ja eine Idee für eine bessere Lösung. Auch im Bezug auf die Optik der Tabelle, denn sind wir mal ehrlich, wir benutzen LaTex doch nicht nur, weil es angenehm zu verwenden ist, sondern auch, weil das Ergebnis einfach gut aussieht (wenn man alles richtig macht). :D
\documentclass[12pt,a4paper]{scrreprt}

\usepackage[utf8]{inputenc} %Eingabekodierung
\usepackage[german]{babel} %deutscher Sprachraum
\usepackage[T1]{fontenc} %Ausgabefonts
\usepackage{times} %Schriftart Times
\usepackage[left=25mm,right=30mm,top=25mm,bottom=25mm]{geometry}

\usepackage{multirow}
\usepackage{booktabs}
\usepackage{rotating}
\usepackage{tabularx}

\begin{document}

\begin{tabularx}{\textwidth}{l l l | c c c c | c }
\toprule
&&& \multicolumn{4}{c|}{Klassifikationsdaten} & Producers\\
&&& Landwirtschaft & Wüste & Wasser & Siedlung & Accuracy\\
\midrule
\multirow{4}{1em}{\begin{sideways} Referenz-\end{sideways}} & \multirow{4}{1em}{\begin{sideways} daten\end{sideways}} & Landwirtschaft & 20925 & 450 & 225 & 1575 & 90\\
&& Wüste & 450 & 3825 & 0 & 225 & 85\\
&& Wasser & 0 & 0 & 450 & 0 & 100\\
&& Siedlung & 1125 & 0 & 450 & 20250 & 93\\
\midrule
&& Users Accuracy & 93 & 89 & 40 & 92 & \textbf{90.99}\\
\bottomrule
\end{tabularx}

\vspace{2cm}

\begin{tabularx}{\textwidth}{l l | c c c c | c }
\toprule
& & \multicolumn{4}{c|}{Klassifikationsdaten} & Producers\\
& & Landwirtschaft & Wüste & Wasser & Siedlung & Accuracy\\
\midrule
\multirow{2}{2cm}{\parbox{2cm}{\begin{center}
Referenz -daten \end{center}}}  & Landwirtschaft & 21825 & 0 & 900 & 1125 & 91.51\\
& Wüste & 225 & 4275 & 0 & 450 & 86.36\\
& Wasser & 0 & 0 & 0 & 0 & 0\\
& Siedlung & 450 & 0 & 225 & 20475 & 96.81\\
\midrule
& Users Accuracy & 97 & 100 & 0 & 92.86 & \textbf{93.24}\\
\bottomrule
\end{tabularx}

\end{document}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Da ich gerade etwas Zeit erübrigen konnte, habe ich an Deinem Beispiel herumgebastelt.

In [d]l2tabu[/d] wird statt times unter anderem mathptmx als Ersatz empfohlen. Leider scheint dieses Paket den Fettdruck in der S-Spalte nicht zu unterstützen. Eine Alternative habe ich als Kommentar nach times eingefügt.

Die table-Umgebung ist eine Möglichkeit auf Dein \vspace zu verzichten. Es muss aber keine Gleitumgebung sein, wenn Du an dieser Stelle keine brauchst.
\documentclass[fontsize=12pt]{scrreprt}

\usepackage[utf8]{inputenc} %Eingabekodierung
\usepackage[ngerman]{babel} %deutscher Sprachraum
\usepackage[T1]{fontenc} %Ausgabefonts
\usepackage{times}
%\usepackage{newtxtext,newtxmath}
\usepackage[left=25mm,right=30mm,top=25mm,bottom=25mm]{geometry}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{rotating}
\usepackage{tabularx}
\usepackage{siunitx}
\usepackage{etoolbox}% für \robustify
\usepackage{showframe}

\sisetup{
	locale=DE,
   detect-weight
}

\begin{document}
\begin{table}[htbp]
\robustify\bfseries% Abschnitt 7.15 in siunitx.pdf
\centering
\begin{tabular}{
	p{.8cm}
	l
	S[table-format=5]
	S[table-format=4]
	S[table-format=3]
	S[table-format=5]
	S[table-format=3.2]
}
\toprule
&& \multicolumn{4}{c}{Klassifikationsdaten} & \multicolumn{1}{>{\centering}p{1.7cm}}{Producers Accuracy}\\
\cmidrule(lr){3-6}
&& {Landwirtschaft} & {Wüste} & {Wasser} & {Siedlung} & \\
\midrule
\multirow{4}{*}{\rotatebox{90}{\parbox{1.8cm}{\centering\hspace{0pt} Referenzdaten}}} & Landwirtschaft & 20925 & 450 & 225 & 1575 & 90\\
& Wüste & 450 & 3825 & 0 & 225 & 85\\
& Wasser & 0 & 0 & 450 & 0 & 100\\
& Siedlung & 1125 & 0 & 450 & 20250 & 93\\
\midrule
& Users Accuracy & 93 & 89 & 40 & 92 & \bfseries 90.99\\
\bottomrule
\end{tabular}
\end{table}

\begin{table}[htbp]
\robustify\bfseries
\small
\begin{tabularx}{\textwidth}{
	l
	X
	S[table-format=5]
	S[table-format=4]
	S[table-format=3]
	S[table-format=5.2]
	S[table-format=3.2]
}
\toprule
& & \multicolumn{4}{c}{Klassifikationsdaten} & \multicolumn{1}{>{\centering}p{1.7cm}}{Producers Accuracy}\\
\cmidrule(lr){3-6}
& & {Landwirtschaft} & {Wüste} & {Wasser} & {Siedlung} & \\
\midrule
\multirow{4}{*}{\parbox{1.8cm}{\centering\hspace{0pt} Referenzdaten}}  & Landwirtschaft & 21825 & 0 & 900 & 1125 & 91.51\\
& Wüste & 225 & 4275 & 0 & 450 & 86.36\\
& Wasser & 0 & 0 & 0 & 0 & 0\\
& Siedlung & 450 & 0 & 225 & 20475 & 96.81\\
\midrule
& Users Accuracy & 97 & 100 & 0 & 92.86 & \bfseries 93.24\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}

pointloma
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Sa 23. Apr 2016, 16:01

Beitrag von pointloma »

Ich danke dir schon einmal. Deine Tabelle sieht natürlich viel besser aus, bringt (für mich) aber noch neue Probleme mit sich.

Die Zahlen von Users & Producers Accuracy sind eigentlich Prozentzahlen, das hatte ich oben noch vergessen. Dementsprechend sollten diese auch zwei Nachkommazahlen haben. Die Anpassung der siunitx-columns ist mir auch nach Googeln noch nicht geläufig und scheint mir auch nicht ganz trivial zu sein.
\documentclass[fontsize=12pt]{scrreprt} 

\usepackage[utf8]{inputenc} %Eingabekodierung 
\usepackage[ngerman]{babel} %deutscher Sprachraum 
\usepackage[T1]{fontenc} %Ausgabefonts 
\usepackage{times} 
%\usepackage{newtxtext,newtxmath} 
\usepackage[left=25mm,right=30mm,top=25mm,bottom=25mm]{geometry} 
\usepackage{multirow} 
\usepackage{booktabs} 
\usepackage{rotating} 
\usepackage{tabularx} 
\usepackage{siunitx} 
\usepackage{etoolbox}% für \robustify 
\usepackage{showframe} 

\sisetup{ 
locale=DE, 
detect-weight 
} 

\begin{document} 
\begin{table}[htbp]
\robustify\bfseries% Abschnitt 7.15 in siunitx.pdf
\centering
\begin{tabular}{
   p{.8cm}
   l
   S[table-format=5]
   S[table-format=4]
   S[table-format=3]
   S[table-format=5]
   S[table-format=3.2]
}
\toprule
&& \multicolumn{4}{c}{Klassifikationsdaten} & \multicolumn{1}{>{\centering}p{1.7cm}}{Producers Accuracy}\\
\cmidrule(lr){3-6}
&& {Landwirtschaft} & {Wüste} & {Wasser} & {Siedlung} & \\
\midrule
\multirow{4}{*}{\rotatebox{90}{\parbox{1.8cm}{\centering\hspace{0pt} Referenzdaten}}} & Landwirtschaft & 20925 & 450 & 675 & 1575 & 88.57\\
& Wüste & 450 & 3825 & 0 & 225 & 85.00\\
& Wasser & 0 & 0 & 450 & 0 & 0.00\\
& Siedlung & 1125 & 0 & 450 & 20250 & 92.78\\
\midrule
& Users Accuracy & 93.00 & 89.47 & 0.00 & 91.84 & \bfseries{90.99}\\
\bottomrule
\end{tabular}
\caption{Fehlermatrix Verschnitt pixel- und objektbasierte Klassifikation}
\end{table}
\end{document}
Was mir hierbei noch fehlt sind Prozentzeichen hinter den Kommazahlen (eigentlich ja Punktzahlen) und ein rechtsbündiger Abschluss dieser. Vielleicht findest du ja noch einmal Zeit.

Danke dir schon mal soweit!

Gast

Beitrag von Gast »

Statt Google solltest du besser die die Paketanleitung des Pakets [d]siunitx[/d] befragen. Außerdem gibt es hier im Forum und den Partnerseiten diverse Beispiele für die Verwendung des Pakets.

Der Status Rückfrage ist für potentielle Helfer reserviert. Bitte achte auf korrektes Setzen des Status. Damit potentielle Helfer nicht weiter darauf warten, dass du die Rückfrage beantwortest und den Status anpasst, bevor sie hier reinschauen, setze ich den mal wieder passend auf "offen".

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

pointloma hat geschrieben:Die Zahlen von Users & Producers Accuracy sind eigentlich Prozentzahlen, das hatte ich oben noch vergessen. Dementsprechend sollten diese auch zwei Nachkommazahlen haben.

Was mir hierbei noch fehlt sind Prozentzeichen hinter den Kommazahlen (eigentlich ja Punktzahlen) und ein rechtsbündiger Abschluss dieser.
Sind diese Prozentzeichen in jeder der beschriebenen Zellen eine Vorgabe, oder darf dieses Zeichen auch für eine ganze Zeile bzw. Spalte stehen?
\documentclass[fontsize=12pt]{scrreprt} 

\usepackage[utf8]{inputenc} %Eingabekodierung 
\usepackage[ngerman]{babel} %deutscher Sprachraum 
\usepackage[T1]{fontenc} %Ausgabefonts 
\usepackage{times} 
%\usepackage{newtxtext,newtxmath} 
\usepackage[left=25mm,right=30mm,top=25mm,bottom=25mm]{geometry} 
\usepackage{multirow} 
\usepackage{booktabs} 
\usepackage{rotating}
\usepackage{siunitx} 
\usepackage{etoolbox}
\usepackage{showframe} 

\sisetup{ 
	locale=DE, 
	detect-weight 
} 

\begin{document} 
\begin{table}[htbp]
\robustify\bfseries
\small
\centering
\begin{tabular}{
	p{.8cm}
	l
	S[table-format=5.2]
	S[table-format=4.2]
	S[table-format=3.2]
	S[table-format=5.2]
	S[table-format=2.2]
}
\toprule
&& \multicolumn{4}{c}{Klassifikationsdaten} & \multicolumn{1}{>{\centering}p{1.7cm}}{Producers Accuracy}\\
\cmidrule(lr){3-6}
&& {Landwirtschaft} & {Wüste} & {Wasser} & {Siedlung} & \\
&& &&&& \si{\percent}\\ % <- eingefügt
\midrule
\multirow{4}{*}{\rotatebox{90}{\parbox{1.8cm}{\centering\hspace{0pt} Referenzdaten}}} & Landwirtschaft & 20925 & 450 & 675 & 1575 & 88.57\\
& Wüste & 450 & 3825 & 0 & 225 & 85.00\\
& Wasser & 0 & 0 & 450 & 0 & 0.00\\
& Siedlung & 1125 & 0 & 450 & 20250 & 92.78\\
\midrule
& Users Accuracy (\si{\percent}) & 93.00 & 89.47 & 0.00 & 91.84 & \bfseries {90.99}\\ % <- geändert
\bottomrule
\end{tabular}
\caption{Fehlermatrix Verschnitt pixel- und objektbasierte Klassifikation}
\end{table}
\end{document}
Mir ist nicht so recht klar, wie dieser rechtsbündige Abschluss aussehen soll. Könntest Du vielleicht anhand eines Bildes ein Beispiel zeigen, um etwaige Missverständnisse auszuschließen.

Nur die Zahl 90.99 soll einen Punkt statt eines Kommas als Dezimaltrennzeichen haben?

Nachtrag:

Prozentzeichen in jeder Zelle in der betreffenden Zeile und Spalte:
\documentclass[fontsize=12pt]{scrreprt} 

\usepackage[utf8]{inputenc} %Eingabekodierung 
\usepackage[ngerman]{babel} %deutscher Sprachraum 
\usepackage[T1]{fontenc} %Ausgabefonts 
\usepackage{times} 
%\usepackage{newtxtext,newtxmath} 
\usepackage[left=25mm,right=30mm,top=25mm,bottom=25mm]{geometry} 
\usepackage{multirow} 
\usepackage{booktabs} 
\usepackage{rotating}
\usepackage{siunitx} 
\usepackage{etoolbox}
\usepackage{showframe} 

\sisetup{ 
	locale=DE, 
	detect-weight 
} 

\begin{document} 
\begin{table}[htbp]
\robustify\bfseries
\small
\centering
\sisetup{
	table-number-alignment = center,
	table-figures-decimal = 2,
	table-space-text-post =\,\si{\percent}
}
\begin{tabular}{
	p{.8cm}
	l
	S[table-figures-integer = 5]
	S[table-figures-integer = 4]
	S[table-figures-integer = 3]
	S[table-figures-integer = 5]
	S[table-figures-integer = 2]
}
\toprule
&& \multicolumn{4}{c}{Klassifikationsdaten} & \multicolumn{1}{>{\centering}p{1.7cm}}{Producers Accuracy}\\
\cmidrule(lr){3-6}
&& {Landwirtschaft} & {Wüste} & {Wasser} & {Siedlung} & \\
\midrule
\multirow{4}{*}{\rotatebox{90}{\parbox{1.8cm}{\centering\hspace{0pt} Referenzdaten}}} & Landwirtschaft & 20925 & 450 & 675 & 1575 & 88.57\,\si{\percent}\\
& Wüste & 450 & 3825 & 0 & 225 & 85.00\,\si{\percent}\\
& Wasser & 0 & 0 & 450 & 0 & 0.00\,\si{\percent}\\
& Siedlung & 1125 & 0 & 450 & 20250 & 92.78\,\si{\percent}\\
\midrule
& Users Accuracy & 93.00\,\si{\percent} & 89.47\,\si{\percent} & 0.00\,\si{\percent} & 91.84\,\si{\percent} & \bfseries {90.99}\,\si{\percent}\\
\bottomrule
\end{tabular}
\caption{Fehlermatrix Verschnitt pixel- und objektbasierte Klassifikation}
\end{table}
\end{document}

pointloma
Forum-Anfänger
Forum-Anfänger
Beiträge: 14
Registriert: Sa 23. Apr 2016, 16:01

Beitrag von pointloma »

Vielen Dank noch einmal für die Hilfe, die Tabelle ist schon fast "perfekt". Natürlich kenne ich auch die Paketanleitung, allerdings muss ich zugeben, dass sie mir in diesem Fall nicht wirklich weiterhilft, weil ich schlicht auch gar nicht genau weiß, wo ich gucken muss. Ich habe mich mit dem Paket siunitx bisher noch nie auseinander gesetzt und brauch noch eine Weile, bis ich den Code ganz verstehe.

Was mir jetzt noch fehlt, ist dass die Ausrichtung der letzten Zeile "User's Accuracy" unabhängig der anderen Zeilen ist, so dass diese rechtsbündig mit den darüber liegenden Zahlen abschließt. Mal schauen, vielleicht kriege ich das ja sogar selber hin.

Antworten