Преглед изворни кода

added more random data;added parameters to multivariate-random.py

Martin Thoma пре 11 година
родитељ
комит
67feb2890d

+ 5 - 5
tikz/csv-2d-gaussian-multivarate-distributions/csv-2d-gaussian-multivarate-distributions.tex

@@ -5,7 +5,7 @@
 \usepackage{pgfplots}
 \pgfplotsset{compat=1.10}
 \usepackage{tikz}
-\usetikzlibrary{arrows,positioning} 
+\usetikzlibrary{arrows, positioning} 
 \usepackage{helvet}
 \usepackage[eulergreek]{sansmath}
 
@@ -48,7 +48,7 @@
         y label style={at={(axis description cs:-0.05,0.5)},
                        anchor=south,
                        rotate=90,
-                       font=\boldmath\sansmath\sffamily\Large},
+                       font=\boldmath\sansmath\sffamily\Large}
         ]
 \addplot[
 scatter,
@@ -65,9 +65,9 @@ scatter,
 only marks,
 point meta=explicit symbolic,
 scatter/classes={
-b={mark=*,mark size=3pt,red!30!white,draw=black},%
-c={mark=*,mark size=3pt,cyan!30!white,draw=black},%
-a={mark=*,mark size=3pt,green!70!black,draw=black}},
+b={mark=*,mark size=4pt,red!30!white,draw=black},%
+c={mark=*,mark size=4pt,cyan!30!white,draw=black},%
+a={mark=*,mark size=4pt,green!70!black,draw=black,pin=135:{\color{black}$(65, 35)$},label={(65, 35)}] {}}},
 ]
 table[meta=label] {
     x   y   label

Разлика између датотеке није приказан због своје велике величине
+ 6000 - 4000
tikz/csv-2d-gaussian-multivarate-distributions/data.csv


+ 46 - 34
tikz/csv-2d-gaussian-multivarate-distributions/multivariate-random.py

@@ -4,37 +4,49 @@ import matplotlib.pyplot as plt
 import numpy
 import csv
 
-cov = [[25, 20], [20, 25]]  # diagonal covariance, points lie on x or y-axis
-
-meanI = [70, 40]
-datapointsI = 2000
-
-meanII = [60, 20]
-datapointsII = 2000
-
-dataI = numpy.random.multivariate_normal(meanI, cov, datapointsI).T
-x, y = dataI
-plt.plot(x, y, 'x')
-
-dataII = numpy.random.multivariate_normal(meanII, cov, datapointsII).T
-x, y = dataII
-plt.plot(x, y, 'x')
-
-plt.axis('equal')
-plt.show()
-
-data = []
-xs, ys = dataI
-for x, y in zip(xs, ys):
-    data.append([x, y, 'a'])
-xs, ys = dataII
-for x, y in zip(xs, ys):
-    data.append([x, y, 'b'])
-
-# Write data to csv files
-with open("data.csv", 'wb') as csvfile:
-    csvfile.write("x,y,label\n")
-    spamwriter = csv.writer(csvfile, delimiter=',',
-                            quotechar='"', quoting=csv.QUOTE_MINIMAL)
-    for datapoint in data:
-        spamwriter.writerow(datapoint)
+
+def main(n):
+    cov = [[25, 20], [20, 25]]
+
+    meanI = [70, 40]
+    datapointsI = n
+
+    meanII = [60, 20]
+    datapointsII = n
+
+    dataI = numpy.random.multivariate_normal(meanI, cov, datapointsI).T
+    x, y = dataI
+    plt.plot(x, y, 'x')
+
+    dataII = numpy.random.multivariate_normal(meanII, cov, datapointsII).T
+    x, y = dataII
+    plt.plot(x, y, 'x')
+
+    plt.axis('equal')
+    plt.show()
+
+    data = []
+    xs, ys = dataI
+    for x, y in zip(xs, ys):
+        data.append([x, y, 'a'])
+    xs, ys = dataII
+    for x, y in zip(xs, ys):
+        data.append([x, y, 'b'])
+
+    # Write data to csv files
+    with open("data.csv", 'wb') as csvfile:
+        csvfile.write("x,y,label\n")
+        spamwriter = csv.writer(csvfile, delimiter=',',
+                                quotechar='"', quoting=csv.QUOTE_MINIMAL)
+        for datapoint in data:
+            spamwriter.writerow(datapoint)
+
+if __name__ == "__main__":
+    from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
+    parser = ArgumentParser(description=__doc__,
+                            formatter_class=ArgumentDefaultsHelpFormatter)
+    parser.add_argument("-n",
+                        dest="n", default=2000, type=int,
+                        help="how many points should get generated")
+    args = parser.parse_args()
+    main(args.n)