-
Notifications
You must be signed in to change notification settings - Fork 4
/
mpl_defaults.py
144 lines (110 loc) · 3.58 KB
/
mpl_defaults.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 9 23:35:32 2022
@author: jordanlubbers
"""
import matplotlib.pyplot as plt
import matplotlib
import os
# rebuild fonts list...for if you recently
# added a new ttf file.
# matplotlib.font_manager._rebuild()
#removes the matplotlib cache so fonts always work
#this is usually in the form of a json file with
#"fontlist" somewhere in the filename.
cache_dir = matplotlib.get_cachedir()
#for windows paths
for file in os.listdir(cache_dir):
if 'fontlist' in file:
os.remove(cache_dir +'\\'+file)
# setting matplotlib defaults
p = plt.rcParams
# figure-wide aesthetics
p["figure.figsize"] = [6,4]
p["figure.edgecolor"] = "black"
p["figure.facecolor"] = "none"
p['figure.dpi'] = 100
p['savefig.dpi'] = 300
p['figure.titlesize'] = 24
#axes-level aesthetics
p["axes.linewidth"] = 1
p["axes.facecolor"] = "white"
p["axes.ymargin"] = 0.1
p["axes.spines.bottom"] = True
p["axes.spines.left"] = True
p["axes.spines.right"] = True
p["axes.spines.top"] = True
p["axes.labelsize"] = 20
#font stuff
p['font.family'] = 'sans-serif'
# on my computer good options for sans serif are
# Arial, Roboto Condensed, CMU Sans Serif, Fira Sans Condensed
p['font.sans-serif'] = ['CMU Sans Serif']
# computer modern for serif fonts
p['font.serif'] = ['CMU Serif']
#grid defaults
p["axes.grid"] = False
p["grid.color"] = "black"
p["grid.linewidth"] = 0.1
#x-tick customization
p["xtick.bottom"] = True
p["xtick.top"] = False
p["xtick.direction"] = "out"
p["xtick.major.size"] = 5
p["xtick.major.width"] = 1
p["xtick.minor.size"] = 3
p["xtick.minor.width"] = 0.5
p["xtick.minor.visible"] = True
p['xtick.labelsize']= 10
#y-tick customization
p["ytick.left"] = True
p["ytick.right"] = False
p["ytick.direction"] = "out"
p["ytick.major.size"] = 5
p["ytick.major.width"] = 1
p["ytick.minor.size"] = 3
p["ytick.minor.width"] = 0.5
p["ytick.minor.visible"] = True
p['ytick.labelsize']= 10
#marker customization
p["lines.linewidth"] = 1.5
p["lines.marker"] = ""
p["lines.markeredgewidth"] = 0.5
p["lines.markeredgecolor"] = "k"
p["lines.markerfacecolor"] = "auto"
p["lines.markersize"] = 7
#helper function for removing the top
#and right spines for a simple looking plot
def left_bottom_axes(ax):
for spine in ['top','right']:
ax.spines[spine].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
ax.set_facecolor('white')
#helper function for removing the top
#and right spines for a simple looking plot
def bottom_only_axes(ax):
for spine in ['top','right','left']:
ax.spines[spine].set_visible(False)
ax.set_yticks([])
ax.get_xaxis().tick_bottom()
ax.set_facecolor('white')
#helper for labeling subplots
from matplotlib.offsetbox import AnchoredText
import string
def label_subplots(axes,location,fontsize = 14,alpha = .5):
if len(axes.shape) > 1:
axes = axes.ravel()
letters = list(string.ascii_uppercase)
for a,letter in zip(axes,letters):
at = AnchoredText("{}".format(letter), prop=dict(size=fontsize),frameon=True, loc= location)
at_noletters = AnchoredText("{}".format(letter), prop=dict(size=fontsize,color = 'white'),frameon=True, loc=location)
at_noletters.patch.set_boxstyle("round,pad=0.,rounding_size=0.2")
at.patch.set_boxstyle("round,pad=0.,rounding_size=0.2")
at.patch.set_linewidth(2)
at_noletters.patch.set_facecolor('white')
at.patch.set_facecolor('none')
at_noletters.patch.set_alpha(alpha)
a.add_artist(at_noletters)
a.add_artist(at)