我需要使用程式將統計資料從資料庫匯出到 PDF 檔案。資料庫包含多個測試,它們需要顯示為長條圖。這是一個例子:
問題很明顯:當 xlabel 很長時,圖表就會超出頁面。但是,我無法提前告知標籤的長度。有時它們只是簡單的字。有時誰的句子。
問題是:如何計算標籤所需的尺寸,並自動縮放長條圖的其餘部分以水平適應頁面?
\subsection{Irányítási kompetencia}
%
\begin{tikzpicture}
\begin{axis}[
xbar,
xmin=,
xmax=61.1111111111,
width=12cm,
height={ 1cm + ( 4.0 * 1cm ) },
symbolic y coords={{Tervezés},{Szervezés},{Döntőképesség},{Ellenőrzés}},
%ylabel={Irányítási kompetencia}, % This is not really needed, need to save space!
xlabel={Pontérték \%},
ytick=data, % Without this, y labels will be written for every "tick". And not for every bar.
nodes near coords,
nodes near coords align = {horizontal}
]
\addplot [draw=black, fill=cyan!40!black] coordinates {
(37.5,{Tervezés})
(61.1111111111,{Szervezés})
(31.25,{Döntőképesség})
(31.25,{Ellenőrzés})
};
\end{axis}
\end{tikzpicture}
%
%
\subsection{Vezetési kompetencia}
%
\begin{tikzpicture}
\begin{axis}[
xbar,
xmin=,
xmax=60.0,
width=12cm,
height={ 1cm + ( 11.0 * 1cm ) },
symbolic y coords={{Megbízhatóság},{Stressztűrés},{Figyelemkoncentráció},{Szabálykövetés},{Önkontroll},{Holisztikus gondolkodás},{Analitikus gondolkodás},{Szervezőkészség},{Alkalmazkodó képesség},{Rendszerező, struktúráló képesség},{Vezetői szerep}},
%ylabel={Vezetési kompetencia}, % This is not really needed, need to save space!
xlabel={Pontérték \%},
ytick=data, % Without this, y labels will be written for every "tick". And not for every bar.
nodes near coords,
nodes near coords align = {horizontal}
]
\addplot [draw=black, fill=cyan!40!black] coordinates {
(55.0,{Megbízhatóság})
(60.0,{Stressztűrés})
(30.0,{Figyelemkoncentráció})
(33.3333333333,{Szabálykövetés})
(35.0,{Önkontroll})
(35.0,{Holisztikus gondolkodás})
(38.8888888889,{Analitikus gondolkodás})
(59.0909090909,{Szervezőkészség})
(54.1666666667,{Alkalmazkodó képesség})
(40.9090909091,{Rendszerező, struktúráló képesség})
(36.3636363636,{Vezetői szerep})
};
\end{axis}
\end{tikzpicture}
更新:我也嘗試將整個 tizkpicture 放入其中\resizebox{\linewidth}{!}{...}
,但它也會垂直縮放,這很糟糕,因為圖表中的條形數量各不相同。因此,「縮放」的意思是:指定圖表的寬度。我的意思不是:「縮放已經渲染的圖表」。
答案1
我不喜歡 的輸出,\resizebox
因為標籤扭曲了......所以我認為更改width
會更好。可能有更簡單的解決方案(使用我找不到的參數),但這是一個。我用這個showframe
包裹來檢查邊距。
\documentclass{article}
\usepackage{t1enc}
\usepackage{pgfplots}
\usepackage[margin=1cm]{geometry} % demo only
\usepackage{varwidth}
\usepackage{environ}
%\usepackage{showframe}
\newsavebox{\mybox}
\newlength{\mylength}
\NewEnviron{fittedplot}[1]{%
\begin{lrbox}{\mybox}\begin{tikzpicture}\begin{axis}[#1,width=\textwidth]\BODY\end{axis}\end{tikzpicture}\end{lrbox}%
\setlength{\mylength}{-\the\wd\mybox}%
\addtolength{\mylength}{2\textwidth}%
\begin{tikzpicture}\begin{axis}[#1,width=\mylength]\BODY\end{axis}\end{tikzpicture}%
}
\begin{document}
\noindent
\begin{fittedplot}{
xbar,
xmin=,
xmax=60.0,
height={ 1cm + ( 11.0 * 1cm ) },
symbolic y coords={{Megbízhatóság},{Stressztűrés},{Figyelemkoncentráció},{Szabálykövetés},{Önkontroll},{Holisztikus gondolkodás},{Analitikus gondolkodás},{Szervezőkészség},{Alkalmazkodó képesség},{Rendszerező, struktúráló képesség},{Vezetői szerep}},
%ylabel={Vezetési kompetencia}, % This is not really needed, need to save space!
xlabel={Pontérték \%},
ytick=data, % Without this, y labels will be written for every "tick". And not for every bar.
nodes near coords,
nodes near coords align = {horizontal}}
\addplot [draw=black, fill=cyan!40!black] coordinates {
(55.0,{Megbízhatóság})
(60.0,{Stressztűrés})
(30.0,{Figyelemkoncentráció})
(33.3333333333,{Szabálykövetés})
(35.0,{Önkontroll})
(35.0,{Holisztikus gondolkodás})
(38.8888888889,{Analitikus gondolkodás})
(59.0909090909,{Szervezőkészség})
(54.1666666667,{Alkalmazkodó képesség})
(40.9090909091,{Rendszerező, struktúráló képesség})
(36.3636363636,{Vezetői szerep})
};
\end{fittedplot}
\end{document}