@@ -30,7 +30,6 @@ def color_legend(color):
30
30
# TODO: need outline on line
31
31
return plt .Line2D ([0 ],[0 ], color = color , linewidth = 5 )
32
32
33
- # TODO(bug): this *sometimes* decides to not use marker='o'
34
33
def size_legend (size ):
35
34
return plt .Line2D ([0 ],[0 ], color = 'black' , marker = 'o' , linestyle = 'None' , markersize = size ** .5 )
36
35
@@ -43,98 +42,45 @@ def shape_legend(shape):
43
42
def linetype_legend (linetype ):
44
43
return plt .Line2D ([0 ],[0 ], color = 'black' , linestyle = linetype )
45
44
45
+ def make_aesthetic_legend (aesthetic , value ):
46
+ if aesthetic == 'color' :
47
+ return color_legend (value )
48
+ elif aesthetic == 'fill' :
49
+ return color_legend (value )
50
+ elif aesthetic == 'size' :
51
+ return size_legend (value )
52
+ elif aesthetic == 'alpha' :
53
+ return alpha_legend (value )
54
+ elif aesthetic == 'shape' :
55
+ return shape_legend (value )
56
+ elif aesthetic == 'linetype' :
57
+ return linetype_legend (value )
58
+ else :
59
+ print (aesthetic + " not found" )
46
60
47
61
def make_legend (ax , legend_mapping ):
48
62
# TODO: for some reason this reaks havoc! but this is also how you would do a bold legend :(
49
63
# plt.rc('text', usetex=True)
50
-
64
+
51
65
extra = Rectangle ((0 , 0 ), 0 , 0 , facecolor = "w" , fill = False , edgecolor = 'none' , linewidth = 0 )
52
66
53
67
items = []
54
68
labels = []
55
69
56
- if 'color' in legend_mapping :
57
- items .append (extra )
58
- colname = legend_mapping ['color' ]['name' ]
59
- # spacer = r'\n' if len(labels) > 0 else r''
60
- spacer = '\n ' if len (labels ) > 0 else ''
61
- # TODO: this is supposed to make the label bold
62
- # labels.append(spacer + r'\textbf{' + colname + '}')
63
- labels .append (spacer + colname )
64
- for key in sorted (legend_mapping ['color' ]['lookup' ].keys ()):
65
- value = legend_mapping ['color' ]['lookup' ][key ]
66
- legend_item = color_legend (value )
67
- items .append (legend_item )
68
- labels .append (key )
69
-
70
- if 'fill' in legend_mapping :
71
- items .append (extra )
72
- colname = legend_mapping ['fill' ]['name' ]
73
- # spacer = r'\n' if len(labels) > 0 else r''
74
- spacer = '\n ' if len (labels ) > 0 else ''
75
- # TODO: this is supposed to make the label bold
76
- # labels.append(spacer + r'\textbf{' + colname + '}')
77
- labels .append (spacer + colname )
78
- for key in sorted (legend_mapping ['fill' ]['lookup' ].keys ()):
79
- value = legend_mapping ['fill' ]['lookup' ][key ]
80
- legend_item = color_legend (value )
81
- items .append (legend_item )
82
- labels .append (key )
83
-
84
- if 'shape' in legend_mapping :
85
- items .append (extra )
86
- colname = legend_mapping ['shape' ]['name' ]
87
- # spacer = r'\n' if len(labels) > 0 else r''
88
- spacer = '\n ' if len (labels ) > 0 else ''
89
- # TODO: this is supposed to make the label bold
90
- # labels.append(spacer + r'\textbf{' + colname + '}')
91
- labels .append (spacer + colname )
92
- for key in sorted (legend_mapping ['shape' ]['lookup' ].keys ()):
93
- value = legend_mapping ['shape' ]['lookup' ][key ]
94
- legend_item = shape_legend (value )
95
- items .append (legend_item )
96
- labels .append (key )
97
-
98
- if 'alpha' in legend_mapping :
99
- items .append (extra )
100
- colname = legend_mapping ['alpha' ]['name' ]
101
- # spacer = r'\n' if len(labels) > 0 else r''
102
- spacer = '\n ' if len (labels ) > 0 else ''
103
- # TODO: this is supposed to make the label bold
104
- # labels.append(spacer + r'\textbf{' + colname + '}')
105
- labels .append (spacer + colname )
106
- for key in sorted (legend_mapping ['alpha' ]['lookup' ].keys ()):
107
- value = legend_mapping ['alpha' ]['lookup' ][key ]
108
- legend_item = alpha_legend (value )
109
- items .append (legend_item )
110
- labels .append (key )
111
-
112
- if 'size' in legend_mapping :
113
- items .append (extra )
114
- colname = legend_mapping ['size' ]['name' ]
115
- # spacer = r'\n' if len(labels) > 0 else r''
116
- spacer = '\n ' if len (labels ) > 0 else ''
117
- # TODO: this is supposed to make the label bold
118
- # labels.append(spacer + r'\textbf{' + colname + '}')
119
- labels .append (spacer + colname )
120
- for key in sorted (legend_mapping ['size' ]['lookup' ].keys ()):
121
- value = legend_mapping ['size' ]['lookup' ][key ]
122
- legend_item = size_legend (value )
123
- items .append (legend_item )
124
- labels .append (key )
125
-
126
- if 'linetype' in legend_mapping :
127
- items .append (extra )
128
- colname = legend_mapping ['linetype' ]['name' ]
129
- # spacer = r'\n' if len(labels) > 0 else r''
130
- spacer = '\n ' if len (labels ) > 0 else ''
131
- # TODO: this is supposed to make the label bold
132
- # labels.append(spacer + r'\textbf{' + colname + '}')
133
- labels .append (spacer + colname )
134
- for key in sorted (legend_mapping ['linetype' ]['lookup' ].keys ()):
135
- value = legend_mapping ['linetype' ]['lookup' ][key ]
136
- legend_item = linetype_legend (value )
137
- items .append (legend_item )
138
- labels .append (key )
70
+ for aesthetic in ['color' , 'fill' , 'shape' , 'alpha' , 'size' , 'linetype' ]:
71
+
72
+ if aesthetic in legend_mapping :
73
+ items .append (extra )
74
+ colname = legend_mapping [aesthetic ]['name' ]
75
+ # spacer = r'\n' if len(labels) > 0 else r''
76
+ spacer = '\n ' if len (labels ) > 0 else ''
77
+ # TODO: this is supposed to make the label bold
78
+ # labels.append(spacer + r'\textbf{' + colname + '}')
79
+ labels .append (spacer + colname )
80
+ for key in sorted (legend_mapping [aesthetic ]['lookup' ].keys ()):
81
+ value = legend_mapping [aesthetic ]['lookup' ][key ]
82
+ legend_item = make_aesthetic_legend (aesthetic , value )
83
+ items .append (legend_item )
84
+ labels .append (key )
139
85
140
86
legend = ax .legend (items , labels , loc = 'center left' , bbox_to_anchor = (1.05 , 0.5 ), fontsize = 'small' , frameon = False )
0 commit comments