|
From: Sterling S. <sm...@fu...> - 2013-03-27 16:21:03
|
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 <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 >> |