我有四个简单的数据库:
数据库1
dy,volume
2009,120000
2010,160000
2011,400000
2012,650000
2013,1000000
2014,1500000
数据库
dy,volume
2009,400000
2010,500000
2011,1600000
2012,2200000
2013,2500000
2014,4000000
db3
dy,volume
2009,100000
2010,120000
2011,150000
2012,160000
2013,400000
2014,1000000
db4
dy,volume
2009,250000
2010,400000
2011,750000
2012,900000
2013,1400000
2014,3000000
使用这四个文件,我喜欢创建一个简单的图形表示,例如这dataplot
。我为此使用了包。这是我的源文件:
测试.tex
\documentclass{book}
\usepackage{dataplot}
\begin{document}
\DTLloaddb{db1}{db1.csv}
\DTLloaddb{db2}{db2.csv}
\DTLloaddb{db3}{db3.csv}
\DTLloaddb{db4}{db4.csv}
\begin{figure}[htbp]
\centering
\DTLplot{db1,db2,db3,db4}{x=dy,y=volume,
width=3in,height=3in,style=lines,legend,legendlabels={Legend1,Legend2,Legend3,Legend4},
xlabel={Year},ylabel={Volume},box,
xticpoints={2009,2010,2011,2012,2013,2014}
}
\caption{A simple graph}
\end{document}
但是,我一遍又一遍地收到这个错误:
Package datatool Error: Can't assign \DTLthisX : there is no key `dy' in database `db1'.
如果有人可以在这方面帮助我,指出我的错误或提供任何有用的信息来处理这个问题。
还有一个问题:
由于我的数据库包含大量数字(即> 100000
),我该如何设法在y-axis
as100k
等上显示它。其中k
表示kilo
。有什么想法吗?
答案1
我不熟悉dataplot
,但这里有一个你可以用它做什么的例子pgfplots
;我只绘制了前两组数据,但你可以轻松地在现有代码的基础上构建以包含后两组数据。
关于 y 轴上的“巨大数字”,无论您最终使用dataplot
还是pgfplots
,我强烈建议您将它们乘以 10^{-6} 并在 y 标签中指定该因子;数字会变得更容易阅读(没有人喜欢计算大量的零)。但是,这真的取决于你。
我已经用来filecontents
模拟你的.cvs 文件的存在。
\documentclass{article}
\usepackage{filecontents}
\usepackage{pgfplots}
\pgfplotsset{compat = 1.3}
\begin{document}
\begin{filecontents*}{db1.cvs}
dy,volume
2009,120
2010,160
2011,400
2012,650
2013,1000
2014,1500
\end{filecontents*}
\begin{filecontents*}{db2.cvs}
dy,volume
2009,400
2010,500
2011,1600
2012,2200
2013,2500
2014,4000
\end{filecontents*}
\begin{tikzpicture}
\begin{axis}[%
width=\textwidth,
ylabel shift=1ex,
enlargelimits=0.13,
tick align=outside,
legend style={cells={anchor=west},legend pos=north east},
xtick={2009,2010,...,2014},
xticklabels={2009,2010,2011,2012,2013,2014},
ytick={500,1000,...,4000},
yticklabels={500k,1000k,1500k,2000k,2500k,3000k,3500k,4000k},
xlabel=\textbf{year},
ylabel=\textbf{volume}
]
\addplot[mark=none,blue] table [x=dy, y=volume, col sep=comma] {db1.cvs};
\addlegendentry{db1}
\addplot[mark=none,red] table [x=dy, y=volume, col sep=comma] {db2.cvs};
\addlegendentry{db2}
\end{axis}
\end{tikzpicture}
\end{document}