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.hackst...@gmx.net> 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 <smit...@fusion.gat.com>:
>
> > 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® 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
>
------------------------------------------------------------------------------
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