我\symbolic y coords
在xbar
-plot 中使用。其中一些坐标非常长。有一个解决方案使用nodes
非常...硬编码。如果能实现自动化就好了。
- 如何在刻度标签中生成换行符?
- 有没有不使用节点的方法?
梅威瑟:
\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,...}
指定 时才有效,例如通过设置 。align
yticklabel 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}
正确编译的示例,将和包替换为:lualatex
pdflatex
inputenc
fontenc
fontspec
\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}