刻度标签中的换行符

刻度标签中的换行符

\symbolic y coordsxbar-plot 中使用。其中一些坐标非常长。有一个解决方案使用nodes非常...硬编码。如果能实现自动化就好了。

  1. 如何在刻度标签中生成换行符?
  2. 有没有不使用节点的方法?

梅威瑟:

\documentclass[12pt,a4paper]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=0.9\textwidth,compat=newest}

\begin{document}

\begin{tikzpicture}
\pgfplotsset{every axis legend/.append style={at={(0.5,1.025)}, anchor=south,semithick,legend columns=3}}
    \begin{axis}[   xlabel=x-label,
            xbar,
            xmin=0,
            enlarge y limits=0.2,
            height=0.5\textwidth,
            ytick=data,
            bar width=7pt,
            symbolic y coords={y label 1,y label 2,very very very very very long y label 3,thelongestylabeleverwrittenasoneword},]

            \addplot coordinates
            {(5.3987,y label 1)(16.1961,y label 2)(32.081,very very very very very long y label 3)(41.9026,thelongestylabeleverwrittenasoneword)};
            \addplot coordinates
            {(2.3917,y label 1)(7.1751,y label 2)(10.153,very very very very very long y label 3)(15.5834,thelongestylabeleverwrittenasoneword)};
            \addplot coordinates
            {(0.4881,y label 1)(1.4643,y label 2)(4.361,very very very very very long y label 3)(2.7435,thelongestylabeleverwrittenasoneword)};
    \end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案1

我将以稍微不同的方式处理此图:symbolic y coords我不会使用 ,而是使用 手动指定标签yticklabels={<First>,<Second>,...},这样就可以使用 之类的东西明确指定换行符。这仅在您还为标签yticklabels={Primär-\\energieverbrauch,...}指定 时才有效,例如通过设置 。alignyticklabel style={align=right}

我还会先将数据加载到表中,方法是加载pgfplotstable包(随 PGFplots 一起提供),然后使用\pgfplotstableread{<data table>}<macro name>。然后,您可以说\addplot table [x=<column name>] <macro name>绘制一列。如果您的数据表不包含可用于位置的数字 ID 字段y,您可以说\addplot table [x=<column name>, y=\coordindex] ...,它将按顺序为表中的每一行分配一个数字。

\documentclass[12pt,a4paper]{article}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{width=0.9\textwidth,compat=1.4}

\pgfplotstableread[col sep=comma]{
Name,A,B,C
Stromverbrauch, 5398.7, 2391.7, 488.1
Primärenergieverbrauch, 16196.1, 7175.1, 1464.3
Primärenergieeinsparung, 10153, 15583.4, 4361
Kälteproduktion, 32081, 41902.6, 2743.5
}\datatable
\begin{document}

\begin{tikzpicture}
\pgfplotsset{every axis legend/.append style={at={(0.5,1.025)}, anchor=south,semithick,legend columns=3}}
    \begin{axis}[   xlabel=Energie {[kWh]},
            xbar,
            xmin=0,
            enlarge y limits=0.2,
            height=0.5\textwidth,
            ytick=data,
            yticklabels={
                Stromverbrauch,
                Primärenergie-\\verbrauch,
                Primärenergie-\\einsparung,
                Kälteproduktion
            },
            yticklabel style={align=right},
            bar width=7pt,
            ]

            \addplot [fill=red] table [x=A,y expr=\coordindex] {\datatable};
            \addplot [fill=green] table [x=B,y expr=\coordindex] {\datatable};
            \addplot [fill=blue] table [x=C,y expr=\coordindex] {\datatable};
    \end{axis}
\end{tikzpicture}

\end{document}

通常,您可以通过输入 来设置标签可能占用的最大宽度yticklabel style={text width=<length>},从而强制文本换行。但是,即使加载 ,这似乎也不适用于变音符号。以下是使用而不是[T1]{fontenc}正确编译的示例,将和包替换为:lualatexpdflatexinputencfontencfontspec

\documentclass[12pt,a4paper]{article}
\usepackage{lmodern}
\usepackage{fontspec}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\pgfplotsset{width=0.9\textwidth,compat=1.4}

\begin{document}

\begin{tikzpicture}
\pgfplotsset{every axis legend/.append style={at={(0.5,1.025)}, anchor=south,semithick,legend columns=3}}
    \begin{axis}[   xlabel=Energie {[kWh]},
            xbar,
            xmin=0,
            enlarge y limits=0.2,
            height=0.5\textwidth,
            ytick=data,yticklabel style={text width=3cm,align=right},
            bar width=7pt,
            symbolic y coords={Stromverbrauch,Primärenergieverbrauch,Primärenergieeinsparung,Kälteproduktion},]

            \addplot [fill=red] coordinates
            {(5398.7,Stromverbrauch)(16196.1,Primärenergieverbrauch)(32081,Primärenergieeinsparung)(41902.6,Kälteproduktion)};
            \addplot [fill=green] coordinates
            {(2391.7,Stromverbrauch)(7175.1,Primärenergieverbrauch)(10153,Primärenergieeinsparung)(15583.4,Kälteproduktion)};
            \addplot [fill=blue] coordinates
            {(488.1,Stromverbrauch)(1464.3,Primärenergieverbrauch)(4361,Primärenergieeinsparung)(2743.5,Kälteproduktion)};
    \end{axis}
\end{tikzpicture}

\end{document}

相关内容