在使用 pstricks 箱线图、psaxes、pspicture 时遇到困难

在使用 pstricks 箱线图、psaxes、pspicture 时遇到困难

我是 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。有时测试无法正确运行,我需要显示错误。如果您能为我提供可以生成如下图所示的内容的代码,我将不胜感激。

enter image description here

更新:这适用于 MikTeX 2.9,但不适用于 Windows 下的 MikTeX 2.8。

UPDATE2:Oy=4如果您想提高情节,请进行设置。

答案1

编辑

psgraph我推荐使用软件包提供的环境pst-plot。这样你可以简单地调整图形。

我建立了一个产生基础的例子并希望它有所帮助。

首先是结果;-)

enter image description here

为了简化工作,我创建了三个新命令。第一个命令\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}

相关内容