如何保持 x 轴和 y 轴的比例为 1:1

如何保持 x 轴和 y 轴的比例为 1:1

我已经花了好几个小时寻找如何解决这些小问题的方法,最后我承认失败并谦虚地寻求帮助。最近我一直在检查我画得很糟糕的一些人物,试图把它们弄干净等等。

    \documentclass[10pt,a4paper]{article} 
\usepackage{tikz,tkz-euclide,pgfplots}
\usetkzobj{all}
\begin{document}

\begin{tikzpicture}[x=0.02cm,y=0.02cm,scale=0.8]
  \tkzInit[ymin=-40,ymax=390,xmin=-40,xmax=540]
  \tkzClip
\draw[help lines,ultra thin,dashed,gray!50!white] (-50,-50) grid (550,400);
\coordinate [label=below right:{50}] (x_1) at (50,0);
\coordinate [label=below right:{}] (B) at (0,390);
\coordinate [label=above right:{\large $y$}] (U) at (0,350);
\coordinate [label=above left:{\large $x$}] (A) at (540,0);
\coordinate [label=below right:{50}] (x_1) at (50,0);
\coordinate [label=below right:{100}] (x_2) at (100,0);
\coordinate [label=below right:{150}] (x_3) at (150,0);
\coordinate [label=below right:{200}] (x_4) at (200,0);
\coordinate [label=below right:{250}] (x_5) at (250,0);
\coordinate [label=below right:{300}] (x_6) at (300,0);
\coordinate [label=below right:{350}] (x_7) at (350,0);
\coordinate [label=below right:{400}] (x_8) at (400,0);
\coordinate [label=below right:{450}] (x_9) at (450,0);
\coordinate [label=below right:{500}] (x_10) at (500,0);
\coordinate [label=below right:{0}] (O) at (0,0);
\coordinate [label=above left:{50}] (y_1) at (0,50);
\coordinate [label=above left:{100}] (y_2) at (0,100);
\coordinate [label=above left:{150}] (y_3) at (0,150);
\coordinate [label=above left:{200}] (y_4) at (0,200);
\coordinate [label=above left:{250}] (y_5) at (0,250);
\coordinate [label=above left:{300}] (y_6) at (0,300);
\coordinate [label=above left:{350}] (y_7) at (0,350);
\coordinate [label=above left:{\bf Kostnader per m{\aa}ned (kroner)}] (R) at (400,350);
\coordinate [label=above left:{\bf Ringetid (minutter)}] (K) at (540,20);
\tkzDefPoint(0,-50){C} 
\tkzDefPoint(-50,0){D}
\tkzDefPoint(0,87.50){S}
\tkzDefPoint(500,337.50){T}
\tkzDrawSegment[thick,-stealth](D,A)
\tkzDrawSegment[thick,-stealth](C,B)
\tkzDrawSegment[ultra thick,red](S,T)
\end{tikzpicture}

\vspace*{2ex}

\begin{tikzpicture}
\begin{axis}[
    scale only axis,
    grid=major,
    grid style={dashed, gray!40},
    axis lines=middle,
    inner axis line style={-stealth},
    xlabel={\begin{tabular}{@{}r@{}}\bf Ringetid (minutter)\\ \large $x$\end{tabular}},
    ylabel={\large $y$ \ \ \normalsize \bf Kostnader per m{\aa}ned (kroner)},
    ytick={0,50,...,350},
    xtick={0,50,...,500},
    x tick label style={below right},
    y tick label style={above left,},
    ymin=-50,
    ymax=380,
    xmin=-50,
    xmax=550,
]
\addplot[color=red,very thick] coordinates { (0, 75) (500, 340)};
\end{axis}
\end{tikzpicture}

\end{document}

第一张图片的代码比较乱,但输出结果正是我想要的。我尝试清理代码,但遇到了很多问题。

我的主要问题是如何保持 x 轴和 y 轴之间的比率,有什么办法吗?

(现在,我对 x 和 y 标签以及轴的粗细也有一些问题,但我想这可以等待另一个答案......)。任何其他关于改进的提示都很好。=)

答案1

有三个选项:

  • 您可以指定axis equal(或等效地),通过扩大轴范围,unit vector ratio=1 1 1使轴单位相同,同时保持绘图尺寸(由width和设置)不变。height
  • 您可以指定axis equal image(或等效地unit vector ratio*=1 1 1),这将使轴单位相同,但不保持图的尺寸。轴限值不会改变。
  • 您可以自己明确指定单位向量长度,使用类似x=0.015cm, y=0.015cm。这样,绘图尺寸将取决于轴限值。根据我的经验,如果您有多个带有条形图的轴,并且条目数不同,这可能会很有趣。通过指定单位向量的长度,ybar具有 20 个条目的轴的宽度将是具有 10 个条目的轴的两倍,同时保持条形之间的距离不变。

在这种情况下,我会选择第二种选择,因为您可能更关心轴限制而不是图的精确尺寸。

要获取0刻度标签,您必须使用一些解决方法,如中所述需要对 pgfplots 轴做一些更改

对于多行 x 标签,您不需要使用表格:您可以简单地插入\\并使用设置节点的对齐方式xlabel style={align=right}

\documentclass[10pt,a4paper]{article} 
\usepackage{pgfplots,relsize}
\begin{document}

\begin{tikzpicture}
\begin{axis}[
    unit vector ratio*=1 1 1,
    width=11cm,
    grid=major,
    grid style={dashed, gray!30},
    axis lines=middle, enlargelimits=false,
    inner axis line style={-stealth},
    xlabel={
        \textbf{Ringetid (minutter)}\\\large $x$
    },
    xlabel style={
        anchor=south east,
        align=right
    },
    ylabel={\large $y$ \ \ \normalsize \bf Kostnader per måned (kroner)},
    ytick={0,50,...,350},
    xtick={0,50,...,500},
    x tick label style={below right},
    y tick label style={above left,},
    ymin=-50,
    ymax=380,
    xmin=-50,
    xmax=550,
    after end axis/.code={
        \path (axis cs:0,0) 
        node [anchor=north west,yshift=-0.075cm] {0}
        node [anchor=south east,xshift=-0.075cm] {0};
    }
]
\addplot[color=red,very thick] coordinates {
            (0, 75)
            (500, 340)
        };
\end{axis}
\end{tikzpicture}
\end{document}

答案2

我不是专家,但对于 tkz-euclide ,pgfplots我可以提出一些改进建议。您可以使用一些特定的宏:\tkzgrid、、和。\tkzLabelX\tkzLabelY\tkzDrawX\tkzDrawY

您不需要[x=0.02cm,y=0.02cm]但可以使用scale=0.8

\documentclass[10pt,a4paper]{article} 
\usepackage{tikz,tkz-euclide}
\usetkzobj{all}
\begin{document}

\begin{tikzpicture}
  \tkzInit[ymin=0,ymax=390,xstep=50,ystep=50,xmin=0,xmax=540]
  \tkzGrid
  \tkzLabelX[orig=false,label options={below right}] 
  \tkzLabelY[orig=false]
  \tkzDrawX[below left =22 pt,label={\textbf{Ringetid (minutter)}}]  
  \tkzDrawY[right=12 pt,label={\textbf{Kostnader per m{\aa}ned (kroner)}}]  
  \tkzDefPoint(0,87.50){S}
  \tkzDefPoint(500,337.50){T}
  \tkzDrawSegment[ultra thick,red](S,T)
\end{tikzpicture}

\end{document} 

在此处输入图片描述

相关内容