Trouble with legend and axis scaling

Hello everyone,

I have two issues with my current projects:

  1. I automatically generate plots of several data sets in a for-loop, all of which have the same shape of x and y values, but some of which have two of those data (i.e. graphs) sets per figure, others have only one.

I create the legend by

plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode=‘expand’, numpoints=1, borderaxespad=0.)

which works perfectly if I plot two data sets (and therefore two labels) in a figure, but sometimes (not always) causes an error, if only one data set is plotted in a figure.

The legend is this

print ax.get_legend_handles_labels()

([<matplotlib.lines.Line2D object at 0x24b9550>], [‘i_s’])

and the error is

File “/usr/lib64/python2.6/site-packages/matplotlib/offsetbox.py”, line 76, in _get_packed_offsets

sep = (total - sum(w_list)) / (len(w_list) - 1.)

FloatingPointError: divide by zero encountered in double_scalars

which I broke down to a problem with the" mode=‘expand’" parameter. It seems it cannot expand when the number of labels is 1. Strangely, however, that seems not always to be the case, since some of the plots with only one data set and one legend entry work without problems, but some raise an error.

  1. Another problem occurs with the y-axis tick labels. Even if the y-values are quite ordinary (in the order of 10) the labels get scientific notation when the y-range is small (order 0.1). I don’t know why that is and it only occurs then. When the y-range is larger (order of 1), the ticks get plain numbers. I tried to work around that with the following code, which did not

work:

plt.figure(“i_only”, figsize=(14.40, 9.00), dpi=100) plt.plot(np.asarray(mod_mjd_list_i), np.asarray(x_i), ‘r-’, label = ‘i_s’) ax = plt.gca() formy = plt.ScalarFormatter() formy.set_powerlimits((-5, 5))

formy.set_scientific(False)

ax.yaxis.set_major_formatter(formy)

Any ideas what I can do?

Thanks,

frix

Frix,

It may be useful to post the version and backend you are using to the list.

import matplotlib
print matplotlib.__version__
print matplotlib.get_backend()

Also, if you can format the code as a simple self-contained example, that would help others confirm what you are seeing.

-Sterling

···

On Mar 26, 2013, at 12:01PM, Hackstein wrote:

Hello everyone,

I have two issues with my current projects:

1) I automatically generate plots of several data sets in a for-loop, all of which have the same shape of x and y values, but some of which have two of those data (i.e. graphs) sets per figure, others have only one.
I create the legend by

plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand', numpoints=1, borderaxespad=0.)

which works perfectly if I plot two data sets (and therefore two labels) in a figure, but sometimes (not always) causes an error, if only one data set is plotted in a figure.
The legend is this

print ax.get_legend_handles_labels()
([<matplotlib.lines.Line2D object at 0x24b9550>], ['i_s'])

and the error is

File "/usr/lib64/python2.6/site-packages/matplotlib/offsetbox.py", line 76, in _get_packed_offsets
    sep = (total - sum(w_list)) / (len(w_list) - 1.)
FloatingPointError: divide by zero encountered in double_scalars

which I broke down to a problem with the" mode='expand'" parameter. It seems it cannot expand when the number of labels is 1. Strangely, however, that seems not always to be the case, since some of the plots with only one data set and one legend entry work without problems, but some raise an error.

2) Another problem occurs with the y-axis tick labels. Even if the y-values are quite ordinary (in the order of 10) the labels get scientific notation when the y-range is small (order 0.1). I don't know why that is and it only occurs then. When the y-range is larger (order of 1), the ticks get plain numbers. I tried to work around that with the following code, which did not
work:

plt.figure("i_only", figsize=(14.40, 9.00), dpi=100) plt.plot(np.asarray(mod_mjd_list_i), np.asarray(x_i), 'r-', label = 'i_s') ax = plt.gca() formy = plt.ScalarFormatter() formy.set_powerlimits((-5, 5))
formy.set_scientific(False)
ax.yaxis.set_major_formatter(formy)

Any ideas what I can do?

Thanks,
frix

------------------------------------------------------------------------------
Own the Future-Intel&reg; Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game
on Steam. $5K grand prize plus 10 genre and skill prizes.
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Sterling,

I'm using matplotlib version 1.2.0 with agg backend.

Here are two code examples, one for each problem. The first one doesn't save the figure due to the legend problem, seterr causes the script to stop with an error at that position.
The second example shows the scientific labels on the y-axis, although it should be disabled in the code. I can't get the y-axis to display plain labels.

First example:
[code]
import numpy as np
np.seterr(all='raise')
import matplotlib.pyplot as plt

x_i = [11.7574075935, 11.665207135799999, 11.6762413105, 11.6580992311, 11.656368388500001]
x_r = []
dates = [2.83611000e-01, 2.69330463e+02, 2.70280648e+02, 2.71359248e+02, 2.72320822e+02]

diff = 0.16
ra = [0., 110.5349726]
dec = [0., -16.1061281]
med_i = np.median(x_i)
med_r = np.median(x_r)

plt.figure("i_only", figsize=(14.40, 9.00), dpi=100)
if x_r == []:
   plt.plot(dates, np.asarray(x_i), 'r-', label = 'i_s')
   plt.title('i_mag', fontsize='16')
else:
   plt.plot(dates, np.asarray(x_r), 'g-', label = 'r_s')
   plt.plot(dates, np.asarray(x_i), 'r-', label = 'i_s')
   plt.title('i_mag', fontsize='16')
plt.rcParams['xtick.major.pad']=10
plt.rcParams['ytick.major.pad']=10
ax = plt.gca()
ax.title.set_y(1.1)
formy = plt.ScalarFormatter()
formy.set_powerlimits((-5, 5))
formy.set_scientific(False)
ax.yaxis.set_major_formatter(formy)
ax.set_ylim(ax.get_ylim()[::-1])
for tick in ax.xaxis.get_major_ticks():
   tick.label.set_fontsize(16)
for tick in ax.yaxis.get_major_ticks():
   tick.label.set_fontsize(16)
plt.xlabel('Days', fontsize='20', labelpad=20)
plt.ylabel('normalized magnitude / mag', fontsize='20', labelpad=20)

if x_r == []:
   plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
              numpoints=1, ncol=2, borderaxespad=0.)
else:
   plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
              numpoints=1, ncol=2, borderaxespad=0.)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize='16')
plt.savefig('lc0.png', facecolor='white', bbox_inches='tight')
plt.close("i_only")
[/code]

Second example:
[code]
import numpy as np
import matplotlib.pyplot as plt

y_i = [11.1044563514, 11.1228276748, 11.1361234115, 11.1298162168, 11.125134152199999]
y_r = [11.148667168999999, 11.10194503, 11.112352465300001, 11.111687871799999, 11.1214449011]
dates_i = [2.83611000e-01, 2.69330463e+02, 2.70280648e+02, 2.72320822e+02, 2.73250579e+02]
dates_r = [311.28215, 324.25844, 325.25194, 330.20983, 338.21356]
        
diff = 0.16
ra = [112.5379659, 110.5349726]
dec = [ -15.9841039, -16.1061281]
med_i = np.median(y_i)
med_r = np.median(y_r)

plt.figure("i_only", figsize=(14.40, 9.00), dpi=100)
if y_r == []:
    plt.plot(dates_i, np.asarray(y_i), 'r-', label = 'i_s')
    plt.title('i_mag', fontsize='16')
else:
    plt.plot(dates_r, np.asarray(y_r), 'g-', label = 'r_s')
    plt.plot(dates_i, np.asarray(y_i), 'r-', label = 'i_s')
    plt.title('i_mag', fontsize='16')
plt.rcParams['xtick.major.pad']=10
plt.rcParams['ytick.major.pad']=10
ax = plt.gca()
ax.title.set_y(1.1)
formy = plt.ScalarFormatter()
formy.set_powerlimits((-5, 5))
formy.set_scientific(False)
ax.yaxis.set_major_formatter(formy)
ax.set_ylim(ax.get_ylim()[::-1])
for tick in ax.xaxis.get_major_ticks():
    tick.label.set_fontsize(16)
for tick in ax.yaxis.get_major_ticks():
    tick.label.set_fontsize(16)
plt.xlabel('Days', fontsize='20', labelpad=20)
plt.ylabel('normalized magnitude / mag', fontsize='20', labelpad=20)

if y_r == []:
    plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
               numpoints=1, ncol=2, borderaxespad=0.)
else:
    plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
               numpoints=1, ncol=2, borderaxespad=0.)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize='16')
plt.savefig('lc0.png', facecolor='white', bbox_inches='tight')
plt.close("i_only")
[/code]

Best regards,

frix

···

Am 26.03.2013 um 20:36 schrieb Sterling Smith <smithsp@...3304...>:

Frix,

It may be useful to post the version and backend you are using to the list.

import matplotlib
print matplotlib.__version__
print matplotlib.get_backend()

Also, if you can format the code as a simple self-contained example, that would help others confirm what you are seeing.

-Sterling

On Mar 26, 2013, at 12:01PM, Hackstein wrote:

Hello everyone,

I have two issues with my current projects:

1) I automatically generate plots of several data sets in a for-loop, all of which have the same shape of x and y values, but some of which have two of those data (i.e. graphs) sets per figure, others have only one.
I create the legend by

plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand', numpoints=1, borderaxespad=0.)

which works perfectly if I plot two data sets (and therefore two labels) in a figure, but sometimes (not always) causes an error, if only one data set is plotted in a figure.
The legend is this

print ax.get_legend_handles_labels()
([<matplotlib.lines.Line2D object at 0x24b9550>], ['i_s'])

and the error is

File "/usr/lib64/python2.6/site-packages/matplotlib/offsetbox.py", line 76, in _get_packed_offsets
  sep = (total - sum(w_list)) / (len(w_list) - 1.)
FloatingPointError: divide by zero encountered in double_scalars

which I broke down to a problem with the" mode='expand'" parameter. It seems it cannot expand when the number of labels is 1. Strangely, however, that seems not always to be the case, since some of the plots with only one data set and one legend entry work without problems, but some raise an error.

2) Another problem occurs with the y-axis tick labels. Even if the y-values are quite ordinary (in the order of 10) the labels get scientific notation when the y-range is small (order 0.1). I don't know why that is and it only occurs then. When the y-range is larger (order of 1), the ticks get plain numbers. I tried to work around that with the following code, which did not
work:

plt.figure("i_only", figsize=(14.40, 9.00), dpi=100) plt.plot(np.asarray(mod_mjd_list_i), np.asarray(x_i), 'r-', label = 'i_s') ax = plt.gca() formy = plt.ScalarFormatter() formy.set_powerlimits((-5, 5))
formy.set_scientific(False)
ax.yaxis.set_major_formatter(formy)

Any ideas what I can do?

Thanks,
frix

------------------------------------------------------------------------------
Own the Future-Intel&reg; Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game
on Steam. $5K grand prize plus 10 genre and skill prizes.
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Frix,

I get the same error for your first example with v1.1.1 [although I had to comment out the med_r = np.median(x_r) to get it to run]. You should probably file a bug at [1].

I get the same result for your yaxis. You need to change the formatter to

ax.yaxis.set_major_formatter(plt.ScalarFormatter(useOffset=False))

-Sterling

[1] https://github.com/matplotlib/matplotlib/issues

···

On Mar 27, 2013, at 7:09AM, Hackstein wrote:

Sterling,

I'm using matplotlib version 1.2.0 with agg backend.

Here are two code examples, one for each problem. The first one doesn't save the figure due to the legend problem, seterr causes the script to stop with an error at that position.
The second example shows the scientific labels on the y-axis, although it should be disabled in the code. I can't get the y-axis to display plain labels.

First example:
[code]
import numpy as np
np.seterr(all='raise')
import matplotlib.pyplot as plt

x_i = [11.7574075935, 11.665207135799999, 11.6762413105, 11.6580992311, 11.656368388500001]
x_r = []
dates = [2.83611000e-01, 2.69330463e+02, 2.70280648e+02, 2.71359248e+02, 2.72320822e+02]

diff = 0.16
ra = [0., 110.5349726]
dec = [0., -16.1061281]
med_i = np.median(x_i)
med_r = np.median(x_r)

plt.figure("i_only", figsize=(14.40, 9.00), dpi=100)
if x_r == []:
  plt.plot(dates, np.asarray(x_i), 'r-', label = 'i_s')
  plt.title('i_mag', fontsize='16')
else:
  plt.plot(dates, np.asarray(x_r), 'g-', label = 'r_s')
  plt.plot(dates, np.asarray(x_i), 'r-', label = 'i_s')
  plt.title('i_mag', fontsize='16')
plt.rcParams['xtick.major.pad']=10
plt.rcParams['ytick.major.pad']=10
ax = plt.gca()
ax.title.set_y(1.1)
formy = plt.ScalarFormatter()
formy.set_powerlimits((-5, 5))
formy.set_scientific(False)
ax.yaxis.set_major_formatter(formy)
ax.set_ylim(ax.get_ylim()[::-1])
for tick in ax.xaxis.get_major_ticks():
  tick.label.set_fontsize(16)
for tick in ax.yaxis.get_major_ticks():
  tick.label.set_fontsize(16)
plt.xlabel('Days', fontsize='20', labelpad=20)
plt.ylabel('normalized magnitude / mag', fontsize='20', labelpad=20)

if x_r == []:
  plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
             numpoints=1, ncol=2, borderaxespad=0.)
else:
  plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
             numpoints=1, ncol=2, borderaxespad=0.)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize='16')
plt.savefig('lc0.png', facecolor='white', bbox_inches='tight')
plt.close("i_only")
[/code]

Second example:
[code]
import numpy as np
import matplotlib.pyplot as plt

y_i = [11.1044563514, 11.1228276748, 11.1361234115, 11.1298162168, 11.125134152199999]
y_r = [11.148667168999999, 11.10194503, 11.112352465300001, 11.111687871799999, 11.1214449011]
dates_i = [2.83611000e-01, 2.69330463e+02, 2.70280648e+02, 2.72320822e+02, 2.73250579e+02]
dates_r = [311.28215, 324.25844, 325.25194, 330.20983, 338.21356]

diff = 0.16
ra = [112.5379659, 110.5349726]
dec = [ -15.9841039, -16.1061281]
med_i = np.median(y_i)
med_r = np.median(y_r)

plt.figure("i_only", figsize=(14.40, 9.00), dpi=100)
if y_r == []:
   plt.plot(dates_i, np.asarray(y_i), 'r-', label = 'i_s')
   plt.title('i_mag', fontsize='16')
else:
   plt.plot(dates_r, np.asarray(y_r), 'g-', label = 'r_s')
   plt.plot(dates_i, np.asarray(y_i), 'r-', label = 'i_s')
   plt.title('i_mag', fontsize='16')
plt.rcParams['xtick.major.pad']=10
plt.rcParams['ytick.major.pad']=10
ax = plt.gca()
ax.title.set_y(1.1)
formy = plt.ScalarFormatter()
formy.set_powerlimits((-5, 5))
formy.set_scientific(False)
ax.yaxis.set_major_formatter(formy)
ax.set_ylim(ax.get_ylim()[::-1])
for tick in ax.xaxis.get_major_ticks():
   tick.label.set_fontsize(16)
for tick in ax.yaxis.get_major_ticks():
   tick.label.set_fontsize(16)
plt.xlabel('Days', fontsize='20', labelpad=20)
plt.ylabel('normalized magnitude / mag', fontsize='20', labelpad=20)

if y_r == []:
   plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
              numpoints=1, ncol=2, borderaxespad=0.)
else:
   plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand',
              numpoints=1, ncol=2, borderaxespad=0.)
leg = plt.gca().get_legend()
ltext = leg.get_texts()
plt.setp(ltext, fontsize='16')
plt.savefig('lc0.png', facecolor='white', bbox_inches='tight')
plt.close("i_only")
[/code]

Best regards,

frix

Am 26.03.2013 um 20:36 schrieb Sterling Smith <smithsp@...3304...>:

Frix,

It may be useful to post the version and backend you are using to the list.

import matplotlib
print matplotlib.__version__
print matplotlib.get_backend()

Also, if you can format the code as a simple self-contained example, that would help others confirm what you are seeing.

-Sterling

On Mar 26, 2013, at 12:01PM, Hackstein wrote:

Hello everyone,

I have two issues with my current projects:

1) I automatically generate plots of several data sets in a for-loop, all of which have the same shape of x and y values, but some of which have two of those data (i.e. graphs) sets per figure, others have only one.
I create the legend by

plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode='expand', numpoints=1, borderaxespad=0.)

which works perfectly if I plot two data sets (and therefore two labels) in a figure, but sometimes (not always) causes an error, if only one data set is plotted in a figure.
The legend is this

print ax.get_legend_handles_labels()
([<matplotlib.lines.Line2D object at 0x24b9550>], ['i_s'])

and the error is

File "/usr/lib64/python2.6/site-packages/matplotlib/offsetbox.py", line 76, in _get_packed_offsets
sep = (total - sum(w_list)) / (len(w_list) - 1.)
FloatingPointError: divide by zero encountered in double_scalars

which I broke down to a problem with the" mode='expand'" parameter. It seems it cannot expand when the number of labels is 1. Strangely, however, that seems not always to be the case, since some of the plots with only one data set and one legend entry work without problems, but some raise an error.

2) Another problem occurs with the y-axis tick labels. Even if the y-values are quite ordinary (in the order of 10) the labels get scientific notation when the y-range is small (order 0.1). I don't know why that is and it only occurs then. When the y-range is larger (order of 1), the ticks get plain numbers. I tried to work around that with the following code, which did not
work:

plt.figure("i_only", figsize=(14.40, 9.00), dpi=100) plt.plot(np.asarray(mod_mjd_list_i), np.asarray(x_i), 'r-', label = 'i_s') ax = plt.gca() formy = plt.ScalarFormatter() formy.set_powerlimits((-5, 5))
formy.set_scientific(False)
ax.yaxis.set_major_formatter(formy)

Any ideas what I can do?

Thanks,
frix

------------------------------------------------------------------------------
Own the Future-Intel&reg; Level Up Game Demo Contest 2013
Rise to greatness in Intel's independent game demo contest.
Compete for recognition, cash, and the chance to get your game
on Steam. $5K grand prize plus 10 genre and skill prizes.
Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

The first issue is a bug, and I opened a PR that fixes this.

https://github.com/matplotlib/matplotlib/pull/1864

In the comments of the PR, you can find a workaround.

Regards,

-JJ

···

On Wed, Mar 27, 2013 at 11:09 PM, Hackstein <news.hackstein@…361…> wrote:

Sterling,

I’m using matplotlib version 1.2.0 with agg backend.

Here are two code examples, one for each problem. The first one doesn’t save the figure due to the legend problem, seterr causes the script to stop with an error at that position.

The second example shows the scientific labels on the y-axis, although it should be disabled in the code. I can’t get the y-axis to display plain labels.

First example:

[code]

import numpy as np

np.seterr(all=‘raise’)

import matplotlib.pyplot as plt

x_i = [11.7574075935, 11.665207135799999, 11.6762413105, 11.6580992311, 11.656368388500001]

x_r = []

dates = [2.83611000e-01, 2.69330463e+02, 2.70280648e+02, 2.71359248e+02, 2.72320822e+02]

diff = 0.16

ra = [0., 110.5349726]

dec = [0., -16.1061281]

med_i = np.median(x_i)

med_r = np.median(x_r)

plt.figure(“i_only”, figsize=(14.40, 9.00), dpi=100)

if x_r == []:

plt.plot(dates, np.asarray(x_i), ‘r-’, label = ‘i_s’)

plt.title(‘i_mag’, fontsize=‘16’)

else:

plt.plot(dates, np.asarray(x_r), ‘g-’, label = ‘r_s’)

plt.plot(dates, np.asarray(x_i), ‘r-’, label = ‘i_s’)

plt.title(‘i_mag’, fontsize=‘16’)

plt.rcParams[‘xtick.major.pad’]=10

plt.rcParams[‘ytick.major.pad’]=10

ax = plt.gca()

ax.title.set_y(1.1)
formy = plt.ScalarFormatter()

formy.set_powerlimits((-5, 5))

formy.set_scientific(False)

ax.yaxis.set_major_formatter(formy)

ax.set_ylim(ax.get_ylim()[::-1])

for tick in ax.xaxis.get_major_ticks():

tick.label.set_fontsize(16)

for tick in ax.yaxis.get_major_ticks():

tick.label.set_fontsize(16)

plt.xlabel(‘Days’, fontsize=‘20’, labelpad=20)

plt.ylabel(‘normalized magnitude / mag’, fontsize=‘20’, labelpad=20)

if x_r == []:
plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode=‘expand’,

numpoints=1, ncol=2, borderaxespad=0.)

else:
plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode=‘expand’,

numpoints=1, ncol=2, borderaxespad=0.)

leg = plt.gca().get_legend()

ltext = leg.get_texts()

plt.setp(ltext, fontsize=‘16’)

plt.savefig(‘lc0.png’, facecolor=‘white’, bbox_inches=‘tight’)

plt.close(“i_only”)

[/code]

Second example:

[code]

import numpy as np

import matplotlib.pyplot as plt

y_i = [11.1044563514, 11.1228276748, 11.1361234115, 11.1298162168, 11.125134152199999]

y_r = [11.148667168999999, 11.10194503, 11.112352465300001, 11.111687871799999, 11.1214449011]

dates_i = [2.83611000e-01, 2.69330463e+02, 2.70280648e+02, 2.72320822e+02, 2.73250579e+02]

dates_r = [311.28215, 324.25844, 325.25194, 330.20983, 338.21356]

diff = 0.16

ra = [112.5379659, 110.5349726]

dec = [ -15.9841039, -16.1061281]

med_i = np.median(y_i)

med_r = np.median(y_r)

plt.figure(“i_only”, figsize=(14.40, 9.00), dpi=100)

if y_r == []:

plt.plot(dates_i, np.asarray(y_i), 'r-', label = 'i_s')

plt.title('i_mag', fontsize='16')

else:

plt.plot(dates_r, np.asarray(y_r), 'g-', label = 'r_s')

plt.plot(dates_i, np.asarray(y_i), 'r-', label = 'i_s')

plt.title('i_mag', fontsize='16')

plt.rcParams[‘xtick.major.pad’]=10

plt.rcParams[‘ytick.major.pad’]=10

ax = plt.gca()

ax.title.set_y(1.1)
formy = plt.ScalarFormatter()

formy.set_powerlimits((-5, 5))

formy.set_scientific(False)

ax.yaxis.set_major_formatter(formy)

ax.set_ylim(ax.get_ylim()[::-1])

for tick in ax.xaxis.get_major_ticks():

tick.label.set_fontsize(16)

for tick in ax.yaxis.get_major_ticks():

tick.label.set_fontsize(16)

plt.xlabel(‘Days’, fontsize=‘20’, labelpad=20)

plt.ylabel(‘normalized magnitude / mag’, fontsize=‘20’, labelpad=20)

if y_r == []:
plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode=‘expand’,

numpoints=1, ncol=2, borderaxespad=0.)

else:
plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode=‘expand’,

numpoints=1, ncol=2, borderaxespad=0.)

leg = plt.gca().get_legend()

ltext = leg.get_texts()

plt.setp(ltext, fontsize=‘16’)

plt.savefig(‘lc0.png’, facecolor=‘white’, bbox_inches=‘tight’)

plt.close(“i_only”)

[/code]

Best regards,

frix

Am 26.03.2013 um 20:36 schrieb Sterling Smith <smithsp@…3304…>:

Frix,

It may be useful to post the version and backend you are using to the list.

import matplotlib

print matplotlib.version

print matplotlib.get_backend()

Also, if you can format the code as a simple self-contained example, that would help others confirm what you are seeing.

-Sterling

On Mar 26, 2013, at 12:01PM, Hackstein wrote:

Hello everyone,

I have two issues with my current projects:

  1. I automatically generate plots of several data sets in a for-loop, all of which have the same shape of x and y values, but some of which have two of those data (i.e. graphs) sets per figure, others have only one.

I create the legend by

plt.legend(bbox_to_anchor=(0., 1.02, 1., 0.102), loc=3, mode=‘expand’, numpoints=1, borderaxespad=0.)

which works perfectly if I plot two data sets (and therefore two labels) in a figure, but sometimes (not always) causes an error, if only one data set is plotted in a figure.

The legend is this

print ax.get_legend_handles_labels()

([<matplotlib.lines.Line2D object at 0x24b9550>], [‘i_s’])

and the error is

File “/usr/lib64/python2.6/site-packages/matplotlib/offsetbox.py”, line 76, in _get_packed_offsets

sep = (total - sum(w_list)) / (len(w_list) - 1.)

FloatingPointError: divide by zero encountered in double_scalars

which I broke down to a problem with the" mode=‘expand’" parameter. It seems it cannot expand when the number of labels is 1. Strangely, however, that seems not always to be the case, since some of the plots with only one data set and one legend entry work without problems, but some raise an error.

  1. Another problem occurs with the y-axis tick labels. Even if the y-values are quite ordinary (in the order of 10) the labels get scientific notation when the y-range is small (order 0.1). I don’t know why that is and it only occurs then. When the y-range is larger (order of 1), the ticks get plain numbers. I tried to work around that with the following code, which did not

work:

plt.figure(“i_only”, figsize=(14.40, 9.00), dpi=100) plt.plot(np.asarray(mod_mjd_list_i), np.asarray(x_i), ‘r-’, label = ‘i_s’) ax = plt.gca() formy = plt.ScalarFormatter() formy.set_powerlimits((-5, 5))

formy.set_scientific(False)

ax.yaxis.set_major_formatter(formy)

Any ideas what I can do?

Thanks,

frix


Own the Future-Intel® Level Up Game Demo Contest 2013

Rise to greatness in Intel’s independent game demo contest.

Compete for recognition, cash, and the chance to get your game

on Steam. $5K grand prize plus 10 genre and skill prizes.

Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d_______________________________________________

Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Own the Future-Intel® Level Up Game Demo Contest 2013

Rise to greatness in Intel’s independent game demo contest.

Compete for recognition, cash, and the chance to get your game

on Steam. $5K grand prize plus 10 genre and skill prizes.

Submit your demo by 6/6/13. http://p.sf.net/sfu/intel_levelupd2d


Matplotlib-users mailing list

Matplotlib-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/matplotlib-users