|
From: Jae-Joon L. <lee...@gm...> - 2013-03-28 03:41:31
|
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 <new...@gm...> 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 <sm...@fu...>: > > > 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 > >> Mat...@li... > >> 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 > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |