我正在尝试制作包含以下长数据的条形图:
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 label
stiny
代码 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}