正确挤压 pgfplot 条形图

正确挤压 pgfplot 条形图

我正在尝试制作包含以下长数据的条形图:

Character   X-Position  Probability
space   1   0.18211
e   2   0.10083
t   3   0.07298
h   4   0.06721
a   5   0.05862
o   6   0.05435
n   7   0.04792
i   8   0.0421
s   9   0.04067
d   10  0.03916
r   11  0.03827
l   12  0.02508
f   13  0.01982
m   14  0.01964
u   15  0.01781
w   16  0.01676
p   17  0.0163
comma   18  0.01394
c   19  0.01391
y   20  0.01309
1   21  0.01165
g   22  0.0111
b   23  0.01075
v   24  0.00551
N   25  0.00544
:   26  0.00537
I   27  0.00493
.   28  0.00491
k   29  0.00488
2   30  0.00423
A   31  0.00395
;   32  0.00357
L   33  0.00304
3   34  0.00246
G   35  0.00166
4   36  0.00163
5   37  0.00143
7   38  0.00138
8   39  0.00128
6   40  0.00122
0   41  0.0011
9   42  0.00102
J   43  0.00072
S   44  0.00059
B   45  0.00058
-   46  0.00052
j   47  0.00047
x   48  0.00046
T   49  0.0004
W   50  0.00038
?   51  0.00037
H   52  0.00029
F   53  0.00028
O   54  0.00027
Y   55  0.00022
M   56  0.0002
R   57  0.00019
C   58  0.00018
q   59  0.00017
!   60  0.00013
E   61  0.00011
Z   62  0.00011
z   63  0.00009
'   64  0.00004
D   65  0.00004
K   66  0.00004
P   67  0.00003
(   68  0.00002
)   69  0.00002
U   70  0.00001

我将这些数据放入名为“my.dat”的文件中,并在同一目录中创建了我的 Latex 文件:

\documentclass[letterpaper]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ybar,
    xlabel=Character, ylabel=Probability
    xtick=data,
    xticklabels from table={my.dat}{Character}
]
\addplot table [
    x=X-Position,
    y=Probability
] {my.dat};

\end{axis}
\end{tikzpicture}
\end{document}

结果很糟糕:

在此处输入图片描述

使用 Excel,我知道如何使图表看起来不错。字母看起来有点挤,所以我拉伸了图表:

在此处输入图片描述

但请注意,它如何自行尝试使条形尽可能细,以便将所有内容都放入图表中。如何让 pgfplots 更加努力地让所有内容都适合?

或者,如果有一种方法可以使条形图自行包装,就像将其切成几部分并将每部分显示在另一个部分的旁边/上方一样,那就太好了。

有谁可以帮忙使用 pgfplots 绘制大量数据吗?

答案1

你可以让它适合给定的空间,但x tick labelstiny

代码 1

\begin{axis}
[   ybar,
  xlabel=Character,
  ylabel=Probability,
  xtick=data,
  xticklabels from table={my.dat}{Character},
  bar width=2pt,
  width=0.95*\textwidth,
  x tick label style={font=\tiny,align=right,rotate=90},
  enlarge x limits=0.01,
  enlarge y limits=0.01,
]
\addplot table
[   x=X-Position,
  y=Probability
] 
{my.dat};
\end{axis}

结果 1

在此处输入图片描述


但问题仍然存在:

  • 你必须这样做吗letter paper
  • 边距需要这么大吗?
  • 由于图表的右侧基本上是空的,对数图不是更好吗?

为了比较:

代码 2

\usepackage[margin=0.6in]{geometry}

...

\begin{semilogyaxis}
  ybar,
  xlabel=Character,
  ylabel=Probability,
  xtick=data,
  xticklabels from table={my.dat}{Character},
  bar width=5pt,
  width=0.95*\textwidth,
  x tick label style={font=\footnotesize,align=right,rotate=90},
  enlarge x limits=0.01,
  enlarge y limits=0.01,
]
\addplot table
[   x=X-Position,
  y=Probability
] 
{my.dat};
\end{semilogyaxis}

结果 2

在此处输入图片描述


根据建议杰克,对于这种情况,散点图可能比条形图更好:

代码 3

\begin{semilogyaxis}
[   scatter,
    scatter src=y,
    only marks,
  xlabel=Character,
  ylabel=Probability,
  xtick=data,
  xticklabels from table={my.dat}{Character},
  bar width=5pt,
  width=0.95*\textwidth,
  x tick label style={font=\footnotesize,align=right,rotate=90},
  enlarge x limits=0.01,
  enlarge y limits=0.02,
  grid=major,
  colormap={portal}{rgb255(0cm)=(255,128,0); rgb255(1cm)=(0,255,255)},
  colormap name=portal,
]
\addplot table
[   x=X-Position,
  y=Probability
] 
{my.dat};
\end{semilogyaxis}

结果 3

在此处输入图片描述

相关内容