我是 TeX 新手。我希望每两周(或更早)绘制一次性能测试结果,显示 2 周的窗口。我看到过类似的问题: 我可以使用 pgfplots 制作箱线图吗
以下答案看起来很有吸引力:
\documentclass{article}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}(-1,-1)(12,14)
\psset{yunit=0.1,fillstyle=solid}
\psaxes[dy=1cm,Dy=10,ticksize=4pt 0,axesstyle=frame](0,0)(12,130)
\rput(1,0){\psBoxplot[fillcolor=red!30]{
100 90 120 115 120 110 100 110 100 90 100 100 120 120 120}}\rput(1,105){2001}
\rput(3,0){\psBoxplot[arrowlength=0.5,fillcolor=blue!30]{
90 120 115 116 115 110 90 130 120 120 120 85 100 130 130}}\rput(3,107){2008}
\rput(5,0){\psBoxplot[barwidth=40pt,arrowlength=1.2,fillcolor=red!30]{
35 70 90 60 100 60 60 80 80 60 50 55 90 70 70}}\rput(5,65){2001}
\rput(7,0){\psBoxplot[barwidth=40pt,fillcolor=blue!30]{
60 65 60 75 75 60 50 90 95 60 65 45 45 60 90}}\rput(7,65){2008}
\rput(9,0){\psBoxplot[fillcolor=red!30]{
20 20 25 20 15 20 20 25 30 20 20 20 30 30 30}}\rput(9,22){2001}
\rput(11,0){\psBoxplot[fillcolor=blue!30,linestyle=dashed]{
20 30 20 35 35 20 20 60 50 20 35 15 30 20 40}}\rput(11,25){2008}
\end{pspicture}
\end{document}
除了它不能完全按照我的要求执行之外。我显然曾尝试修改此示例以生成我想要的内容,但一直没有成功,所以我没有其他内容可以分享,因为它不会有任何帮助。我尝试重新调整坐标(例如在左下角点(12, 40)和右上角点(27,45)处设置一个矩形),但就是无法按照我的要求执行。它们仍然从 0 开始,或者什么都不显示或显示垃圾。我觉得我无法改变一两件事并更接近我的目标。太多设置可能会发生冲突,也许……下面是我想要生成的示例图片(我使用 Dia 手动绘制)。我图片中的箱线图看起来都一样,只是因为复制和粘贴它们更简单。实际上,它们将用三个实数生成 - 运行 1、运行 2 和运行 3(以分钟为单位),例如:42.456、44.123、43.854。有时测试无法正确运行,我需要显示错误。如果您能为我提供可以生成如下图所示的内容的代码,我将不胜感激。
更新:这适用于 MikTeX 2.9,但不适用于 Windows 下的 MikTeX 2.8。
UPDATE2:Oy=4
如果您想提高情节,请进行设置。
答案1
编辑
psgraph
我推荐使用软件包提供的环境pst-plot
。这样你可以简单地调整图形。
我建立了一个产生基础的例子并希望它有所帮助。
首先是结果;-)
为了简化工作,我创建了三个新命令。第一个命令\weekday
提供星期几,其中 1 代表Monday
。这样轴的标签就完成了。
接下来的两个命令绘制矩形。该命令\simpleframe
的语法如下:
\simpleframe[options]
( coordinates of lower left corner )
( coordinates of upper right corner )
{text inside the frame}
第二条新命令\complexframe
具有以下语法。
\complexframe[global options]
( coordinates of lower left corner )
( coordinates of upper right corner )
[options for the first line]
{y value of the first line}
[options for the second line]
{y value of the second line}
{text}
图中显示的是默认值。
\documentclass{article}
\usepackage[landscape]{geometry}
\usepackage{pst-plot}
\usepackage{xparse}
\newcount\daycount
\ExplSyntaxOn
\makeatletter
\DeclareDocumentCommand \weekday { m }
{
\prg_case_int:nnn
{ \int_mod:nn { #1 } { 7 } }
{
{ 1 } {Mo}
{ 2 } {Tue}
{ 3 } {Wed}
{ 4 } {Thu}
{ 5 } {Fri}
{ 6 } {Sat}
{ 0 } {Son}
}
{error}
%}
}
\ExplSyntaxOff
\NewDocumentCommand \simpleframe { O{linecolor=black,linewidth=1pt,fillcolor=red!70,fillstyle=solid} r() r() m }
{
\begingroup
\psset{#1}
\pst@getcoor{#2}\pst@tempA
\pst@getcoor{#3}\pst@tempB
\psframe(!%
\pst@tempA /YA exch \pst@number\psyunit div def
/XA exch \pst@number\psxunit div def
XA YA
)(!
\pst@tempB /YB exch \pst@number\psyunit div def
/XB exch \pst@number\psxunit div def
XB YB
)
\rput(!%
\pst@tempA /YA exch \pst@number\psyunit div def
/XA exch \pst@number\psxunit div def
\pst@tempB /YB exch \pst@number\psyunit div def
/XB exch \pst@number\psxunit div def
XA XB add 2 div
YA YB add 2 div
){#4}
\endgroup
}
\NewDocumentCommand \complexframe { %
O{linecolor=black,linewidth=1pt,fillcolor=red!20,fillstyle=solid}% default option
r() r() %coordinates of the frame
O{linecolor=blue,linewidth=2pt} m %y-value of the first line+option
O{linecolor=yellow,linewidth=2pt,linestyle=dashed} m % y-value of the second line+option
m %Text
}
{
\begingroup
\psset{#1}
\pst@getcoor{#2}\pst@tempA
\pst@getcoor{#3}\pst@tempB
\psframe(!%global frame
\pst@tempA /YA exch \pst@number\psyunit div def
/XA exch \pst@number\psxunit div def
XA YA
)(!
\pst@tempB /YB exch \pst@number\psyunit div def
/XB exch \pst@number\psxunit div def
XB YB
)
\rput(!%text
\pst@tempA /YA exch \pst@number\psyunit div def
/XA exch \pst@number\psxunit div def
\pst@tempB /YB exch \pst@number\psyunit div def
/XB exch \pst@number\psxunit div def
XA XB add 2 div
YA YB add 2 div
){#8}
\begingroup
\psset{#4}
\pst@getcoor{0,#5}\pst@tempC
\psline (!%first line
\pst@tempA /YA exch \pst@number\psyunit div def
/XA exch \pst@number\psxunit div def
\pst@tempC /YC exch \pst@number\psyunit div def
/XC exch \pst@number\psxunit div def
XA YC)(!%
\pst@tempB /YB exch \pst@number\psyunit div def
/XB exch \pst@number\psxunit div def
\pst@tempC /YC exch \pst@number\psyunit div def
/XC exch \pst@number\psxunit div def
XB YC )
\endgroup
\begingroup
\psset{#6}
\pst@getcoor{0,#7}\pst@tempC
\psline (!%first line
\pst@tempA /YA exch \pst@number\psyunit div def
/XA exch \pst@number\psxunit div def
\pst@tempC /YC exch \pst@number\psyunit div def
/XC exch \pst@number\psxunit div def
XA YC)(!%
\pst@tempB /YB exch \pst@number\psyunit div def
/XB exch \pst@number\psxunit div def
\pst@tempC /YC exch \pst@number\psyunit div def
/XC exch \pst@number\psxunit div def
XB YC )
\endgroup
\psframe[fillstyle=none](!%global frame again
\pst@tempA /YA exch \pst@number\psyunit div def
/XA exch \pst@number\psxunit div def
XA YA
)(!
\pst@tempB /YB exch \pst@number\psyunit div def
/XB exch \pst@number\psxunit div def
XB YB
)
\endgroup
}
\makeatother
\begin{document}
\psset{%
xAxisLabel={Day}, yAxisLabel={Whatever},
xAxisLabelPos={16,-15pt},yAxisLabelPos={-0.4in,c},
}
\begin{psgraph}[,Oy=0,labels=y]{->}(0,0)(16,21){0.8\linewidth}{10cm}
\psframe(0,0)(15,20.5)
\multido{\iA=1+1,\iB=14+1}{14}{%
\psxTick(\iA){\weekday{\iA}}%
\psxTick[labelsep=20pt](\iA){\iB}%
}
\simpleframe(3,3)(4,6){foo}
\complexframe(10,10)(12,20){14}{18}{foobar}
\end{psgraph}
\end{document}