Ask Your Question
0

Legend_fonts in list of plots

asked 2020-02-18 03:45:17 +0100

JC gravatar image

Hello there,

I want to make an array of plots, and I need the font size for the legends to be reduced. I tried the code below and some variants.I really don't see what is wrng, when I try the ().set_legend_options(font_size = 8) on a single curve, everything works fine. I tried doing this while running through a list, but did not work.

var('t')
C=[2.5, 1.7, 1, 0.7, 0.5, 0.2, 0, -0.2, -0.5, -0.8, -1, -2] # The values for c
Curves = [polar_plot(1+c*sin(t),0,t,2*pi, 
                     legend_label = '%s'%c.n(digits=2)).set_legend_options(font_size = 8) for c in C]
Array = graphics_array(((Curves[0],Curves[2], Curves[2], Curves[3]),
                     (Curves[4],Curves[5], Curves[6], Curves[7]),
                     (Curves[8],Curves[9], Curves[10], Curves[11])))
Array.show(figsize  = 9)

Thanks in advance!

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
0

answered 2020-02-18 10:53:52 +0100

eric_g gravatar image

You may use a too old version of SageMath: graphics_array had some issues that have been fixed in SageMath 8.9 (see Trac #27865). The following code works well with SageMath 9.0:

var('t')
C=[2.5, 1.7, 1, 0.7, 0.5, 0.2, 0, -0.2, -0.5, -0.8, -1, -2] # The values for c
Curves = [polar_plot(1+c*sin(t),0,t,2*pi, 
                     legend_label = '%s'%c.n(digits=2)) for c in C]
for g in Curves:
    g.set_legend_options(font_size = 8)
Array = graphics_array(((Curves[0],Curves[2], Curves[2], Curves[3]),
                     (Curves[4],Curves[5], Curves[6], Curves[7]),
                     (Curves[8],Curves[9], Curves[10], Curves[11])))
Array.show(figsize  = 9)

The font size is correctly taken into account. Note that the above code differs from yours by the set_legend_options method being called in a loop on all the graphics objects of the list Curves. In the original code, Curves was transformed into a list of outputs of this method, namely a list of None.

edit flag offensive delete link more
0

answered 2020-02-18 09:27:18 +0100

Hi,

.set_legend_options() does not return anything. This means that your list Curves does not contain Graphics objects. I suggest to set the legend options after you made all your plots.

var('t')
C=[2.5, 1.7, 1, 0.7, 0.5, 0.2, 0, -0.2, -0.5, -0.8, -1, -2] # The values for c
Curves = [polar_plot(1+c*sin(t),0,t,2*pi, 
                     legend_label = '%s'%c.n(digits=2)) for c in C]

for curve in Curves:
    curve.set_legend_options(font_size=8)

Array = graphics_array(((Curves[0],Curves[1], Curves[2], Curves[3]),
                     (Curves[4],Curves[5], Curves[6], Curves[7]),
                     (Curves[8],Curves[9], Curves[10], Curves[11])))
Array.show(figsize  = 9)
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2020-02-18 03:45:17 +0100

Seen: 268 times

Last updated: Feb 18 '20