diff --git a/.gitignore b/.gitignore
index 1269488f7fb1f4b56a8c0e5eb48cecbfadfa9219..0c7b4fc7ae64700af8cf434ef028235f669d540a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 data
+__pycache__
diff --git a/analyze/config.py b/analyze/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..aad6ca23c35289c7f222bf32f5dd6a405580277a
--- /dev/null
+++ b/analyze/config.py
@@ -0,0 +1,17 @@
+markers = {
+  "default": ".",
+  "kernel_polling": "+",
+  "manual_polling": "x",
+  "fstack": "s",
+  "caladan": "p",
+  "caladan (per-thread QPS w/ 2 threads)": "p"
+}
+
+colors = {
+  "default": "tab:blue",
+  "kernel_polling": "tab:orange",
+  "manual_polling": "tab:purple",
+  "fstack": "tab:green",
+  "caladan": "tab:red",
+  "caladan (per-thread QPS w/ 2 threads)": "tab:red"
+}
diff --git a/analyze/memcached_conn_scan.py b/analyze/memcached_conn_scan.py
index 8e30644ace6950bcd6bc51c314c8b8a7020b268a..10bc260b827b740a26d770072251087d238ccd56 100644
--- a/analyze/memcached_conn_scan.py
+++ b/analyze/memcached_conn_scan.py
@@ -1,5 +1,6 @@
 import os
 import matplotlib.pyplot as plt
+from config import markers, colors
 
 experiments = [f for f in os.listdir('../data')
     if f.startswith('memcached_conn_scan') and len(os.listdir(os.path.join('../data', f))) > 0]
@@ -65,8 +66,9 @@ def show_plot(threads, include_caladan = False):
         data[name] = (data[name][0], [qps / 2 for qps in data[name][1]], data[name][2])
 
     for k in data:
-        plt.plot(data[k][0], data[k][1], label = k)
+       plt.plot(data[k][0], data[k][1], label = k, marker = markers[k], color = colors[k])
 
+    plt.ticklabel_format(axis = 'both', style = 'sci', scilimits = (0, 4))
     plt.xlabel('Connections (per client w/ 7 * 8 clients)')
     plt.ylabel('QPS')
 
@@ -87,7 +89,7 @@ def show_plot(threads, include_caladan = False):
         plt.title('Memcached connections vs LLC misses, %d threads' % (threads,), y = 1.08)
 
     for k in data:
-        plt.plot(data[k][0], data[k][2], label = k)
+        plt.plot(data[k][0], data[k][2], label = k, marker = markers[k], color = colors[k])
 
     plt.xlabel('Connections (per client w/ 7 * 8 clients)')
     plt.ylabel('LLC misses per request')
diff --git a/analyze/memcached_qps_scan.py b/analyze/memcached_qps_scan.py
index 330ccb24cb49421f5b5474fb0638738c67a805fb..ae98f359c087b79d3fcb276bab03a4ae71f71384 100644
--- a/analyze/memcached_qps_scan.py
+++ b/analyze/memcached_qps_scan.py
@@ -1,5 +1,6 @@
 import os
 import matplotlib.pyplot as plt
+from config import markers, colors
 
 experiments = [f for f in os.listdir('../data')
     if f.startswith('memcached_qps_scan') and len(os.listdir(os.path.join('../data', f))) > 0]
@@ -62,7 +63,7 @@ def show_plot(threads, include_caladan = False):
         data[name] = ([qps / 2 for qps in data[name][0]], data[name][1])
 
     for k in data:
-        plt.plot(data[k][0], data[k][1], label = k)
+        plt.plot(data[k][0], data[k][1], label = k, marker = markers[k], color = colors[k])
 
     plt.xlabel('QPS')
     plt.ylabel('Latency (99th percentile)')