![如何使对数轴“可读”?](https://linux22.com/image/294988/%E5%A6%82%E4%BD%95%E4%BD%BF%E5%AF%B9%E6%95%B0%E8%BD%B4%E2%80%9C%E5%8F%AF%E8%AF%BB%E2%80%9D%EF%BC%9F.png)
如何使对数轴更具可读性?我有许多与此类似的图:
问题出在 y 轴上。任何人都能想象出 10^5 或 10^6 代表什么。对于其他 y 轴来说,这并不那么容易。我不能使用线性轴,因为如果我这样做,所表示函数之间的差异就不再可见了。
我可以使用 pgfplots 的哪个功能让 LaTeX 写出 1.58e6 而不是 10^6.2、3.98e5 而不是 10^6.2 等等?
以下是 MWE:
\documentclass[]{article}
\usepackage{graphicx}
\usepackage{pgfplots, pgfplotstable, filecontents}
\pgfplotsset{compat=newest,width=13.5cm}
\begin{document}
\begin{figure}[h]
\centering
\begin{tikzpicture}
\begin{axis}[
xmode=log,
ymode=log,
log basis x={2},
log basis y={10},
ytickten={4.6,4.8,...,7},
ymajorgrids,
height=7cm,width=14.5cm,
xlabel = xLabel,
ylabel = yLabel,
y label style={at={(axis description cs:-0.07,.5)},anchor=south},
xticklabel style={text height=1.5ex}, % To make sure the text labels are nicely aligned
xtick=data
]
\pgfplotstableread{mwe.dat} \tableRAW
\foreach \p in {6,10,14,18,22,30,34,38,42,46} {\addplot table [y index = \p] from \tableRAW;}
\end{axis}
\end{tikzpicture}
\caption{Caption}
\end{figure}
\end{document}
例如,mwe.dat 包含以下内容:
ProblemSize N[512]_[128]__T N[512]_[128]_O N[512]_[128]_B N[512]_[128]_C N[1024]_[128]_E_T N[1024]_[128]_O N[1024]_[128]_B N[1024]_[128]_C N[2048]_[128]_E_T N[2048]_[128]_O N[2048]_[128]_B N[2048]_[128]_C N[4096]_[128]_E_T N[4096]_[128]_O N[4096]_[128]_B N[4096]_[128]_C N[8192]_[128]_E_T N[8192]_[128]_O N[8192]_[128]_B N[8192]_[128]_C N[16384]_[128]_E_T N[16384]_[128]_O N[16384]_[128]_B N[16384]_[128]_C N[128]_[128]_E_T N[128]_[128]_O N[128]_[128]_B N[128]_[128]_C N[256]_[128]_E_T N[256]_[128]_O N[256]_[128]_B N[256]_[128]_C N[512]_[128]_E_T N[512]_[128]_O N[512]_[128]_B N[512]_[128]_C N[1024]_[128]_E_T N[1024]_[128]_ON[1024]_[128]_B N[1024]_[128]_C N[2048]_[128]_E_T N[2048]_[128]_O N[2048]_[128]_B N[2048]_[128]_C N[4096]_[128]_E_T N[4096]_[128]_O N[4096]_[128]_B N[4096]_[128]_C
256 0.97228 1.02851e+06 21.4983 0.03109 0.97389 1.02681e+06 22.4082 0.04458 0.85456 1.17019e+06 20.3105 0.06449 0.6619 1.5108e+06 13.0575 0.0108 0.67471 1.48212e+06 13.1551 0.17767 0.67388 1.48394e+06 13.39530.01469 0.65627 1.52376e+06 15.5989 0.05612 0.72857 1.37255e+06 13.5689 0.01491 0.92109 1.08567e+06 11.6451 0.04136 0.99086 1.00922e+06 8.48264 0.03864 0.98233 1.01799e+06 8.44543 0.03509 0.98701 1.01316e+06 8.539090.03407
512 1.07073 933942 24.8693 0.11453 1.03132 969631 25.0253 0.00683 0.99106 1.00902e+06 23.7109 0.0312 0.96503 1.03624e+06 20.9663 0.04173 0.86419 1.15715e+06 13.4905 0.02369 0.87189 1.14693e+06 14.0297 0.00568 0.724331.38059e+06 15.1526 0.04204 0.90113 1.10972e+06 13.4288 0.09596 1.11974 893064 16.1055 0.01536 1.50563 664173 11.7053 0.01135 1.77749 562591 8.597 0.14894 1.78091 561510 8.66193 0.02654
1024 1.11973 893072 25.9047 0.01732 1.10779 902698 26.5268 0.00224 1.08851 918687 24.1258 0.11408 1.12235 890987 24.4282 0.00397 1.20571 829386 21.3686 0.19148 1.26128 792845 14.4341 0.03939 0.84159 1.18823e+06 16.65320.0232 1.02138 979067 13.2784 0.15388 1.43999 694449 15.0922 0.14563 1.76639 566126 13.4751 0.0054 2.69765 370693 13.3329 0.38205 3.36242 297404 8.93883 0.14005
2048 1.19361 837794 27.6662 0.01022 1.1495 869943 27.6528 0.056 1.14584 872722 23.7522 0.01878 1.25679 795677 24.428 0.122 1.34877 741416 24.415 0.02426 1.65895 602790 22.1781 0.13764 0.91282 1.09551e+06 18.54360.00182 1.12933 885480 14.0755 0.01297 1.65897 602783 14.5747 0.05213 2.40369 416027 13.1842 0.11423 3.15759 316697 13.4233 0.02508 5.05221 197933 11.7823 0.01389
4096 1.32566 754341 28.9796 0.18622 1.23941 806835 29.674 0.00617 1.2321 811622 27.3659 0.04763 1.34405 744019 23.8127 0.0095 1.59149 628341 24.1053 0.0044 2.24884 444673 25.0658 0.14431 1.00368 996333 20.6166 0.006351.28812 776325 15.1566 0.01053 1.83921 543711 16.1332 0.01447 2.81505 355233 12.8139 0.03186 4.40357 227088 12.8754 0.01846 5.91251 169132 13.439 0.02888
8192 1.65467 604350 36.9892 0.03403 1.39874 714929 31.556 0.0343 1.33747 747680 28.1655 0.0432 1.4603 684790 24.3148 0.06718 1.77654 562891 23.5358 0.06063 2.62917 380348 26.2985 0.03223 1.27283 785650 25.8913 0.021211.42514 701685 17.9831 0.0196 1.99235 501919 18.3988 0.02879 3.10529 322031 13.4503 0.04553 5.23139 191153 13.1992 0.25768 8.41015 118903 13.3096 0.33291
16384 1.78045 561655 36.5921 0.09871 1.69525 589883 38.6196 0.10832 1.47453 678182 29.9039 0.23807 1.57552 634711 28.4095 0.0993 1.94293 514686 24.4086 0.05438 2.90079 344733 26.786 0.09028 1.44748 690855 28.3414 0.075061.68019 595170 23.6952 0.08263 2.31482 431999 20.5626 0.45375 3.31934 301264 14.6222 0.19763 5.76202 173550 13.5533 0.2047 9.99136 100086 13.3392 0.45562
32768 1.88014 531875 37.0423 0.36639 1.87151 534327 41.2633 0.59267 1.77574 563145 35.9772 0.3406 1.73167 577477 29.444 0.32351 2.11832 472072 25.8418 0.34864 3.08201 324463 27.9683 0.38472 1.69134 591247 31.7095 0.315451.90899 523837 27.6826 0.47064 2.63369 379695 26.4278 0.30212 3.51509 284487 16.8641 0.40678 6.12792 163187 15.0831 0.49327 11.227 89070 17.5178 0.50585
65536 1.99541 501150 39.2376 0.97965 2.11309 473240 38.9739 0.85585 1.92737 518841 38.8971 0.79071 2.04267 489555 35.6165 0.7208 2.23172 448084 29.9107 0.81979 3.26429 306345 30.0811 0.81524 1.75929 568411 33.4318 0.81611.98472 503849 28.562 0.70891 2.78507 359057 28.1771 0.98133 4.11666 242915 21.5141 0.73537 6.37485 156866 16.3491 0.49165 11.8903 84101 18.9686 0.70702
131072 2.21894 450665 41.3931 3.56014 2.2088 452734 40.4699 3.17495 2.23575 447277 38.7189 2.43021 2.2738 439792 37.1943 2.34785 2.60879 383319 35.4009 1.99836 3.34132 299282 31.831 1.76457 2.00429 498929 34.285 2.492292.22912 448607 26.9544 2.33051 3.07903 324777 31.6439 2.24561 4.42664 225904 23.1791 2.27318 6.79527 147161 20.4874 2.02689 12.8124 78049 27.7722 2.37168
262144 2.62945 380307 41.5732 9.95812 2.56275 390205 43.4339 8.8167 2.49363 401021 40.9032 5.81198 2.57011 389088 37.4565 4.92038 2.89366 345583 36.5665 4.47881 3.75893 266033 37.8185 4.3511 2.16293 462335 34.2238 7.096932.43386 410869 30.4305 5.94276 3.23885 308751 33.8836 5.24693 4.52934 220782 22.8621 4.84698 7.71618 129597 23.1346 4.65529 13.0328 76729 24.1635 4.74844
524288 3.17954 314510 49.4433 19.7045 2.71247 368667 43.4528 15.9456 2.77835 359925 40.6722 13.4277 2.9079 343890 39.2715 10.2547 3.25927 306817 36.9935 9.09368 4.1093 243350 40.1475 8.65571 2.37853 420427 32.8675 14.46572.69804 370639 29.5104 13.7364 3.46947 288228 33.5227 12.5016 4.91092 203627 23.8064 9.78272 8.04862 124244 23.5891 9.04645 13.1739 75907 24.3282 9.25118
1.04858e+06 3.41797 292571 50.2035 25.2329 3.18887 313590 50.3884 25.2264 3.00674 332586 41.8184 26.6924 3.2022 312285 40.5863 27.495 3.6855 271333 38.4739 28.9153 4.63748 215634 40.7343 29.5919 2.78837 358632 43.1375 21.04533.02078 331040 32.7593 23.5182 3.85434 259447 34.108 25.8087 5.19604 192454 25.6156 27.7838 8.22863 121526 24.0932 25.1218 14.8478 67350 24.4182 29.1166
2.09715e+06 3.74751 266843 51.689 31.0401 3.53613 282795 52.208 32.766 3.30274 302778 42.156 37.4918 3.55384 281385 41.3582 45.5133 4.09515 244191 38.5735 54.6245 5.27339 189631 40.4359 60.7951 3.22626 309956 48.8833 25.41263.42453 292010 35.6319 30.445 4.07128 245622 32.6033 37.1324 5.38778 185605 26.4322 41.9166 8.59486 116348 24.7167 38.584 15.1875 65843 22.5894 49.4032
4.1943e+06 3.94776 253308 51.6652 42.4162 3.84623 259994 53.76 36.6812 3.84898 259809 52.4399 44.5894 3.94163 253702 42.1453 56.8887 4.54418 220061 39.9494 72.8677 5.69155 175699 42.5106 85.9424 3.4007 294057 46.91 31.63 3.68056 271697 40.7103 35.6234 4.6235 216286 46.854 43.6437 5.54189 180443 28.4925 52.7722 8.77397 113973 26.8077 48.7628 15.3429 65176 24.394 62.0138
8.38861e+06 4.45432 224501 53.2226 51.6686 4.32302 231319 54.5407 45.1471 4.30989 232024 53.5507 49.7948 4.54465 220038 49.0005 65.3684 5.11556 195482 41.4991 83.9613 6.23269 160444 42.6107 101.735 3.67634 272009 53.5884 36.32053.92525 254760 41.8977 39.4851 4.86561 205524 44.886 48.8251 6.20439 161176 33.1251 59.0889 8.97228 111454 27.3635 55.796 15.6522 63888 24.7134 69.1079
答案1
安德鲁 (Andrew) 的评论是不够的,因为log plot exponent style
它只影响指数本身的格式;它根本不允许你改变底数。
我并不完全相信你要求的是个好主意。正如你将在下面看到的,你失去了你正在看对数刻度的直接线索,并且必须在头脑中解析数字才能弄清楚。尽管如此,以下是尝试解决方案,我让你决定:
sci log y ticks
我根据log ticks with fixed point
from pgfplots.code.tex
(v1.10)定义了一种新样式。我的样式/pgf/number format
使用sci,sci zerofill,precision=2
。如果您确实想要文字 1.58e6
(我不推荐这样做),您可以verbatim
在代码的该部分添加该选项。我在下面的示例中对其进行了注释。
肯定有更好的方法可以使其仅适用于 y 轴。我通过重新设置为使用标准对数表示来使其工作xticklabel
。相关代码是:
xticklabel={$\pgfkeysvalueof{/pgfplots/log basis x}^{\pgfmathprintnumber[std]{\tick}}$},
log basis x
所以它将尊重轴选项中的任意设置。
完整代码
我从您的示例中删除了所有无关的选项和数据,以清楚地显示更改并使解决方案的工作对我来说更简单。:-) 但是,您的所有自定义仍然有效。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
%%% begin new style, based on /pgfplots/log ticks with fixed point from pgfplots.code.tex
\makeatletter
\pgfplotsset{
sci log y ticks/.style={
/pgfplots/log number format basis/.code 2 args={
\begingroup
\edef\pgfplots@exponent{##2}%
\pgfkeysalso{/pgf/fpu}%
\pgfqkeys{/pgf/number format}{%
sci,sci zerofill,%verbatim, %<-- uncomment for literal 1.58e6
precision=2,
}%
\ifdim##1pt=10pt
\def\pgfplots@baselog{2.30258509299405}%
\else
\pgfmathparse{ln(##1)}%
\let\pgfplots@baselog=\pgfmathresult
\fi
\pgfmathparse{exp(\pgfplots@exponent*\pgfplots@baselog)}%
\pgfmathprintnumber[#1]\pgfmathresult
\endgroup
},
% reset the x-axis ticks... there must be a cleaner way to handle this
xticklabel={$\pgfkeysvalueof{/pgfplots/log basis x}^{\pgfmathprintnumber[std]{\tick}}$},
},
}
\makeatother
%%% end new style
\begin{document}
\begin{tikzpicture}
\begin{loglogaxis}[
log basis x={2},
log basis y={10},
ytickten={4.6,4.8,...,7},
sci log y ticks, % use the defined style
]
\addplot coordinates {(2^8,1.585e7) (2^23,6.31e5)}; % dummy data
\end{loglogaxis}
\end{tikzpicture}
\end{document}