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® 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
matplotlib-users List Signup and Options