수평 막대 차트를 자동 크기 조정하는 방법(pgfplots)

수평 막대 차트를 자동 크기 조정하는 방법(pgfplots)

프로그램을 사용하여 데이터베이스의 통계를 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}

관련 정보