Browse Source

added and automated beautification done by jenson_bo

Martin Thoma 11 years ago
parent
commit
38478cc7e3

+ 4 - 1
tikz/histogram-large-1d-dataset/README.md

@@ -6,4 +6,7 @@ Credits
 --------
 
 Thanks to [esdd](http://tex.stackexchange.com/users/43317/esdd) who helped me
-to get the LaTeX part work (see [tex.SE answer](http://tex.stackexchange.com/a/194966/5645))
+to get the LaTeX part work (see [tex.SE answer](http://tex.stackexchange.com/a/194966/5645))
+
+Thanks to [jenson_bo](http://tex.stackexchange.com/users/17775/jenson-bo) for
+making it beautiful!

BIN
tikz/histogram-large-1d-dataset/histogram-large-1d-dataset.png


+ 28 - 16
tikz/histogram-large-1d-dataset/histogram-large-1d-dataset.template.tex

@@ -1,7 +1,7 @@
 \documentclass[margin=10pt]{standalone}
 \usepackage{amsmath}
 \usepackage{pgfplots}
-\pgfplotsset{compat=1.10}
+\pgfplotsset{compat=1.3}
 
 \newcommand\clipright[1][white]{
   \fill[#1](current axis.south east)rectangle(current axis.north-|current axis.outer east);
@@ -9,36 +9,48 @@
   \useasboundingbox(current axis.outer south west)rectangle([xshift=.5ex]current axis.outer north-|current axis.east);
 }
 
+\definecolor{mycolor}{rgb}{0.02,0.4,0.7}
+
 \begin{document}
 \begin{tikzpicture}
-    \begin{axis}[/tikz/ybar interval,
-        ybar legend,
-        xtick align=outside,
+    \begin{axis}[
+        ymajorgrids,
+        xmajorgrids,
+        grid style={white,thick},
+        axis on top,
+        /tikz/ybar interval,
+        tick align=outside,
         ymin=0,
-        axis x line*=left,
+        axis line style={draw opacity=0},
+        tick style={draw=none},
         enlarge x limits=false,
-        grid=major,
         height=7cm,
         title={All Results},
-        xlabel={recording time $t$ in ms},
+        title style={font=\Large},
+        xlabel={recording time $t$ in s},
         ylabel={Number of Recordings},
-        xtick={0,...,16},
+        ytick={0,10000,20000,30000,40000},
+        scaled ticks=false,
+        yticklabels={ {{yticklabels}} },
         xticklabels={ {{xticklabels}} },
         width=\textwidth,
         xtick=data,
-        xticklabel style={
-            inner sep=0pt,
-            anchor=north east,
-            rotate=45
+        label style={font=\large},
+        ticklabel style={
+            inner sep=1pt,
+            font=\small
         },
         nodes near coords,
         every node near coord/.append style={
-            anchor=mid west,
+            fill=white,
+            anchor=mid west,    
+            shift={(3pt,4pt)},
+            inner sep=0,
+            font=\footnotesize,
             rotate=45},
             ]
-    \addplot[blue, fill=blue!40!white] coordinates { {{coordinates}} };
-    \legend{Time}
+    \addplot[mycolor!80!white, fill=mycolor, draw=none] coordinates { {{coordinates}} };
     \end{axis}
     \clipright
 \end{tikzpicture}
-\end{document}
+\end{document}

+ 46 - 8
tikz/histogram-large-1d-dataset/process.py

@@ -4,6 +4,7 @@
 from __future__ import print_function
 import shutil
 import fileinput
+import math
 
 
 def main(filename, bins, maximum):
@@ -17,7 +18,7 @@ def main(filename, bins, maximum):
     numbers = sorted(numbers)
     minimum = min(numbers)
     bin_counter = [0 for i in range(bins+1)]
-    borders = []
+    xticklabels = []
     for i, number in enumerate(numbers):
         if number >= minimum + (maximum - minimum)/bins*(bins+1):
             bin_counter[bins] += 1
@@ -32,21 +33,56 @@ def main(filename, bins, maximum):
                     break
     for b in range(bins):
         lower = minimum + (maximum - minimum)/bins*b
-        borders.append(str(lower))
-    borders.append("\infty")
-    return bin_counter, borders
+        xticklabels.append(get_xticklabel(lower))
 
+    # Get labels for y-axis
+    ytickslabels = []
+    maxylabel = int(10**math.floor(math.log(max(bin_counter), 10)))
+    ylabelsteps = maxylabel / 10
+    for i in range(0, maxylabel+1, ylabelsteps):
+        ytickslabels.append(get_yticklabel(i, True))
 
-def modify_template(bin_counter, borders):
+    xticklabels.append("\infty")
+    return bin_counter, xticklabels, ytickslabels
+
+
+def get_xticklabel(value):
+    return str(int(value/1000))
+
+
+def get_yticklabel(value, si_suffix):
+    if si_suffix:
+        divide_by, suffix = get_si_suffix(value)
+        new_value = (value / divide_by)
+        if int(new_value) == new_value:
+            return ("%i" % int(new_value)) + suffix
+        else:
+            return ("%0.2f" % new_value) + suffix
+    else:
+        return str(value)
+
+
+def get_si_suffix(value):
+    if value >= 10**3:
+        return (10**3, "K")
+    elif value >= 10**6:
+        return (10**6, "M")
+    else:
+        return (1, "")
+
+
+def modify_template(bin_counter, xticklabels, yticklabels):
     shutil.copyfile("histogram-large-1d-dataset.template.tex",
                     "histogram-large-1d-dataset.tex")
-    xticklabels = ", ".join(map(lambda n: "$%s$" % n, borders))
+    xticklabels = ", ".join(map(lambda n: "$%s$" % n, xticklabels))
+    yticklabels = ", ".join(yticklabels)
     coordinates = ""
     for i, value in enumerate(bin_counter):
         coordinates += "(%i, %i) " % (i, value)
     for line in fileinput.input("histogram-large-1d-dataset.tex",
                                 inplace=True):
         line = line.replace("{{xticklabels}}", xticklabels)
+        line = line.replace("{{yticklabels}}", yticklabels)
         line = line.replace("{{coordinates}}", coordinates)
         print(line, end='')
 
@@ -65,5 +101,7 @@ if __name__ == '__main__':
                         help=("what is the maximum number "
                               "that should get binned?"))
     args = parser.parse_args()
-    bin_counter, borders = main(args.filename, args.bins, args.max)
-    modify_template(bin_counter, borders)
+    bin_counter, xticklabels, yticklabels = main(args.filename,
+                                                 args.bins,
+                                                 args.max)
+    modify_template(bin_counter, xticklabels, yticklabels)