[Matplotlib-users] What changes from matplotlib 1.3.1 to matplotlib 1.5.1 break the following code?

Jacob Barhak jacob.barhak at gmail.com
Thu Mar 24 15:54:24 EDT 2016


Thanks Ben, Thanks Thomas, Thanks Paul,

Your suggestion of adding loc = 0 fixed the code. I just tested it after
adding loc in 3 places in the code.

Here is the corrected line for a possible future reader.

TheLegend = HandleAxes.legend(LineHandles, LabelHandles, loc = 0, prop =
HandleSmallerFont, handlelength = 2.0/1.0)

I will incorporate this code into future releases on MIST, until then, I
will point towards an older version.

Making code stricter is a good idea in many cases, and it seems that you
added deprecation warnings, so this is normal, yet there is a trickle down
price with changing code. I guess we see it now.

I appreciate your rapid and well focused replies.

               Jacob

On Thu, Mar 24, 2016 at 12:07 PM, Benjamin Root <ben.v.root at gmail.com>
wrote:

> I think what helped more than anything else was the full traceback. But
> yes:  short code example >> long code example >> no code example.
>
> On Thu, Mar 24, 2016 at 1:04 PM, Thomas Caswell <tcaswell at gmail.com>
> wrote:
>
>> See https://github.com/matplotlib/matplotlib/pull/3943
>>
>> You are using an API for legend that we no longer support.  You just have
>> to pass `loc` as a keyword argument rather than as the third positional.
>>
>> Running this code on 1.4 should produce a deprecation warning.
>>
>> In the future, please send the mailing list the minimal amount of code to
>> reproduce your problem.  People around here are typically more than happy
>> to help, but please be respectful of our time and make it easy to help you.
>>
>> Tom
>>
>> On Thu, Mar 24, 2016 at 12:52 PM Jacob Barhak <jacob.barhak at gmail.com>
>> wrote:
>>
>>> Sorry Paul,
>>>
>>> The 5 lines with DB in them should ignored. So please comment the 5
>>> lines after the line that things broke in - it is a file that MIST uses and
>>> is not needed for this script. You may also make sure the is a Temp sub
>>> directory below the execution path since the pdf filename should be stored
>>> there.
>>>
>>> Yet after making those fixes, you will find out that the script works on
>>> matplotlib 1.3.1 and breaks on matplotlib 1.5.1. with the following error:
>>>
>>> Traceback (most recent call last):
>>>   File "PlotGeneration_Mod.py", line 21, in <module>
>>>
>>>     TheLegend = HandleAxes.legend(LineHandles, LabelHandles, 0, prop =
>>> HandleSma
>>> llerFont, handlelength = 2.0/1.0)
>>>   File "C:\Anaconda\lib\site-packages\matplotlib\axes\_axes.py", line
>>> 536, in le
>>> gend
>>>     raise TypeError('Invalid arguments to legend.')
>>> TypeError: Invalid arguments to legend.
>>>
>>>
>>> Hopefully this behavior can be explained with changes made.
>>>
>>> I am unsure I wish to upgrade the code, I am considering tow solutions
>>> 1) keeping the old matplotlib version, 2) making some code changes to match
>>> the newer version.
>>>
>>> Your explanation will help me decide on the best solution.
>>>
>>>
>>>                  Jacob
>>>
>>> On Thu, Mar 24, 2016 at 10:45 AM, Paul Hobson <pmhobson at gmail.com>
>>> wrote:
>>>
>>>> Can you trim this down to a reproducible example?
>>>>
>>>> It's hard to debug a "this doesn't work" question when I can't get past
>>>> the imports ("import DataDef as DB")
>>>>
>>>> At the very least, could you tell use where the error is occurring and
>>>> what the error message is?
>>>> -paul
>>>>
>>>> On Thu, Mar 24, 2016 at 1:02 AM, Jacob Barhak <jacob.barhak at gmail.com>
>>>> wrote:
>>>>
>>>>> Greetings,
>>>>>
>>>>> Are there specific new changes in matplotlib 1.5.1 that break previous
>>>>> code?
>>>>>
>>>>> Below is a script that works nicely with matplotlib 1.3.1 and breaks
>>>>> on matplotlib 1.5.1 that comes with the new anaconda on Windows.
>>>>>
>>>>> I am trying to decide if a downgrade of the matplotlib version is the
>>>>> best solution or is there another simple fix that will make the code work
>>>>> again?
>>>>>
>>>>> Note that this is code generated by the MIST system test code, so do
>>>>> not look for logical output - the current goal is just to pass the test by
>>>>> not breaking on any commands.
>>>>>
>>>>> I will appreciate your insight.
>>>>>
>>>>>               Jacob
>>>>>
>>>>>
>>>>> ############# Code that Breaks with 1.5.1 ##############
>>>>>
>>>>> from __future__ import division
>>>>> import matplotlib
>>>>> matplotlib.use('PDF')
>>>>> import matplotlib.pyplot as plt
>>>>> import matplotlib.font_manager
>>>>> import matplotlib.backends.backend_pdf
>>>>> import DataDef as DB
>>>>> Inf = DB.Inf
>>>>> NaN = DB.NaN
>>>>> inf = DB.inf
>>>>> nan = DB.nan
>>>>> HandlePDF =
>>>>> matplotlib.backends.backend_pdf.PdfPages('Temp\SelectedAssembledPlots.pdf')
>>>>> HandleFigure = plt.figure()
>>>>> HandleAxes = HandleFigure.add_subplot(111)
>>>>> DefaultLegendFontSize =
>>>>> matplotlib.font_manager.FontProperties(size=matplotlib.rcParams['legend.fontsize']).get_size_in_points()
>>>>> # New plot sequence
>>>>> HandleAxes.clear()
>>>>> HandleAxes.clear()
>>>>> HandleAxes.set_title('Age - Avg All')
>>>>> HandleAxes.set_xlabel('Time')
>>>>> HandleAxes.plot( [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
>>>>> ,[None, 30.0, None, 30.0, None, 31.0, None, 31.0, 32.0, 32.0, 32.0, 32.0,
>>>>> 33.0, 33.0, 33.0, 33.0], 'ko-' , label = 'File 1')
>>>>> HandleAxes.plot( [] ,[], 'k:' , label = 'File 2')
>>>>> HandleSmallerFont = matplotlib.font_manager.FontProperties(size=
>>>>> DefaultLegendFontSize*1.0 )
>>>>> LineHandles, LabelHandles = HandleAxes.get_legend_handles_labels()
>>>>> TheLegend = HandleAxes.legend(LineHandles, LabelHandles, 0, prop =
>>>>> HandleSmallerFont, handlelength = 2.0/1.0)
>>>>> TheLegend.get_frame().set_alpha(0.5)
>>>>> HandlePDF.savefig(HandleFigure)
>>>>> HandleAxes.clear()
>>>>> HandleAxes.set_title("""Create Plots Warning: No parameter entry :
>>>>> ('Alive', 'Avg All', '')""")
>>>>> HandlePDF.savefig(HandleFigure)
>>>>> HandleAxes.clear()
>>>>> HandleAxes.set_title(' - Rec Count')
>>>>> HandleAxes.set_xlabel('Time')
>>>>> HandleAxes.plot( [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
>>>>> ,[None, 900, None, 1000, None, 900, None, 900, 63, 835, 772, 835, 61, 772,
>>>>> 711, 772], 'ko-' , label = 'File 1')
>>>>> HandleAxes.plot( [] ,[], 'k:' , label = 'File 2')
>>>>> HandleSmallerFont = matplotlib.font_manager.FontProperties(size=
>>>>> DefaultLegendFontSize*1.0 )
>>>>> LineHandles, LabelHandles = HandleAxes.get_legend_handles_labels()
>>>>> TheLegend = HandleAxes.legend(LineHandles, LabelHandles, 0, prop =
>>>>> HandleSmallerFont, handlelength = 2.0/1.0)
>>>>> TheLegend.get_frame().set_alpha(0.5)
>>>>> HandlePDF.savefig(HandleFigure)
>>>>> # New plot sequence
>>>>> HandleAxes.clear()
>>>>> HandleAxes.set_title("""Create Plots Warning: No parameter entry :
>>>>> ('Alive', 'Avg All', '')""")
>>>>> HandlePDF.savefig(HandleFigure)
>>>>> HandleAxes.plot( [None, 30.0, None, 30.0, None, 31.0, None, 31.0,
>>>>> 32.0, 32.0, 32.0, 32.0, 33.0, 33.0, 33.0, 33.0] ,[None, 900, None, 1000,
>>>>> None, 900, None, 900, 63, 835, 772, 835, 61, 772, 711, 772], 'ko-' , label
>>>>> = 'File 1 - nested record count')
>>>>> HandleAxes.plot( [] ,[], 'k:' , label = 'File 2 - nested record count')
>>>>> HandleSmallerFont = matplotlib.font_manager.FontProperties(size=
>>>>> DefaultLegendFontSize*0.714285714286 )
>>>>> LineHandles, LabelHandles = HandleAxes.get_legend_handles_labels()
>>>>> TheLegend = HandleAxes.legend(LineHandles, LabelHandles, 0, prop =
>>>>> HandleSmallerFont, handlelength = 2.0/0.714285714286)
>>>>> TheLegend.get_frame().set_alpha(0.5)
>>>>> HandlePDF.savefig(HandleFigure)
>>>>> HandleAxes.clear()
>>>>> HandleAxes.set_title("""Create Plots Warning: No parameter entry :
>>>>> ('AnError', 'Avg All', '')""")
>>>>> HandlePDF.savefig(HandleFigure)
>>>>> HandleAxes.clear()
>>>>> HandleAxes.set_title("""Create Plots Warning: No parameter entry :
>>>>> ('Alive', 'AlsoAnError', '')""")
>>>>> HandlePDF.savefig(HandleFigure)
>>>>> HandlePDF.close()
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Matplotlib-users mailing list
>>>>> Matplotlib-users at python.org
>>>>> https://mail.python.org/mailman/listinfo/matplotlib-users
>>>>>
>>>>>
>>>>
>>> _______________________________________________
>>> Matplotlib-users mailing list
>>> Matplotlib-users at python.org
>>> https://mail.python.org/mailman/listinfo/matplotlib-users
>>>
>>
>> _______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users at python.org
>> https://mail.python.org/mailman/listinfo/matplotlib-users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20160324/1b466c06/attachment-0001.html>


More information about the Matplotlib-users mailing list