Hi,
with normal polar plot it would work, but there is the problem with the 
half plot. So I use AxisArtist already. The segfault is caused by 
GridHelperCurveLinear and it appears on all my Computers here Python 2.7 
(2 x Win7 64Bit, 1xWin7 32Bit, 2x Linux 64Bit) and mpl 1.4.2

The current solution would work for me, if I could change the axis tick 
labels created with axisartist.

Maik


Am 12.04.2015 um 03:02 schrieb Thomas Caswell:
> Malk,
>
> This is a bit of a gap in mpl currently (but has come up a couple of times (
> https://github.com/matplotlib/matplotlib/issues/4217,
> https://github.com/matplotlib/matplotlib/issues/2203, and
> http://matplotlib.org/devdocs/devel/MEP/MEP24.html).
>
> One of the hold ups has been lack of a developer that uses polar plots
> day-to-day and a lack of really clear use cases.  I think we have three (at
> least) distinct use cases.
>
>   1. origin always an 0, negative radius rotates by pi, always full 2pi
> around, always solid circle (no inner axes) (useful for plotting bunches of
> vectors against each other)
>   2. center is at arbitrary 'r', values less than 'origin' are just not
> shown, always full 2pi, no inner axes (use for for dB plots showing power
> as function of angle)
>   3. inner axes with arbitrary origin, possibly not full 2pi
>
> It is not immediately clear to me if these can all be done with the same
> projection or even if they can be done with the 'standard' Axes class or if
> we need to user AxesArtist here.
>
> This discussion should probably move to MEP24/the devel list.
>
> What version of mpl are you using?  Your example causes seg-faults (!) on
> my system, but I have not sorted out why (may be really strange install
> issues on my end).
>
> Tom
>
> On Thu, Apr 9, 2015 at 6:08 AM Maik Hoffmann <maik.hoffm...@b-tu.de> wrote:
>
>> Hello,
>> I'm using mpl_toolkits.axisartist.floating_axes.GridHelperCurveLinear
>> for creating half-polar plots from 180 degree measurements for receive
>> sensitivity.
>>
>> Working with the measurement values itself is no problem if I let the
>> values scaling start at zero.
>> If I use normalized values I can plot it also, but if I transform it
>> into the dB scale I got a segfault in this lib.
>>
>> I provide an example. For my problems I would like to have a solution
>> that I can either use r limit from -30 to 0 (f3) or changing the tick
>> labels in figure f2.
>>
>> And by the way is there a possibility that the if i want to plot data in
>> the range from 80 to 120, that rlim(80,120) would set the 80 to the
>> centerpoint? At the moment I got only a small stripe.
>>
>> [code]
>> """Demo of polar plot of arbitrary theta. This is a workaround for MPL's
>> polar plot limitation
>> to a full 360 deg.
>>
>> Based on
>> http://matplotlib.org/mpl_toolkits/axes_grid/examples/
>> demo_floating_axes.py
>>
>> get from
>> https://github.com/neuropy/neuropy/blob/master/neuropy/
>> scripts/polar_demo.py
>> TODO: license / copyright
>> """
>>
>> from __future__ import division
>> from __future__ import print_function
>>
>> import numpy as np
>> import matplotlib.pyplot as plt
>>
>> from matplotlib.transforms import Affine2D
>> from matplotlib.projections import PolarAxes
>> from mpl_toolkits.axisartist import angle_helper
>> from mpl_toolkits.axisartist.grid_finder import MaxNLocator
>> from mpl_toolkits.axisartist.floating_axes import GridHelperCurveLinear,
>> FloatingSubplot
>>
>>
>> def fractional_polar_axes(f, thlim=(0, 180), rlim=(0, 1), step=(30, 0.2),
>>                             thlabel='theta', rlabel='r', ticklabels=True,
>> theta_offset=0):
>>       """Return polar axes that adhere to desired theta (in deg) and r
>> limits. steps for theta
>>       and r are really just hints for the locators."""
>>       th0, th1 = thlim # deg
>>       r0, r1 = rlim
>>       thstep, rstep = step
>>
>>       tr_rotate = Affine2D().translate(theta_offset, 0)
>>       # scale degrees to radians:
>>       tr_scale = Affine2D().scale(np.pi/180., 1.)
>>       #pa = axes(polar="true") # Create a polar axis
>>       pa = PolarAxes
>>       tr = tr_rotate + tr_scale + pa.PolarTransform()
>>       theta_grid_locator = angle_helper.LocatorDMS((th1-th0)//thstep)
>>       r_grid_locator = MaxNLocator((r1-r0)//rstep)
>>       theta_tick_formatter = angle_helper.FormatterDMS()
>>
>>       grid_helper = GridHelperCurveLinear(tr,
>>                                           extremes=(th0, th1, r0, r1),
>>                                           grid_locator1=theta_grid_locator,
>>                                           grid_locator2=r_grid_locator,
>>
>> tick_formatter1=theta_tick_formatter,
>>                                           tick_formatter2=None)
>>
>>       a = FloatingSubplot(f, 111, grid_helper=grid_helper)
>>
>>       f.add_subplot(a)
>>
>>       # adjust x axis (theta):
>>       a.axis["bottom"].set_visible(False)
>>       a.axis["top"].set_axis_direction("bottom") # tick direction
>>       a.axis["top"].toggle(ticklabels=ticklabels, label=bool(thlabel))
>>       a.axis["top"].major_ticklabels.set_axis_direction("top")
>>       a.axis["top"].label.set_axis_direction("top")
>>
>>       # adjust y axis (r):
>>       a.axis["left"].set_axis_direction("bottom") # tick direction
>>       a.axis["right"].set_axis_direction("top") # tick direction
>>       a.axis["left"].toggle(ticklabels=ticklabels, label=bool(rlabel))
>>
>>       # add labels:
>>       a.axis["top"].label.set_text(thlabel)
>>       a.axis["left"].label.set_text(rlabel)
>>
>>       # create a parasite axes whose transData is theta, r:
>>       auxa = a.get_aux_axes(tr)
>>       # make aux_ax to have a clip path as in a?:
>>       auxa.patch = a.patch
>>       # this has a side effect that the patch is drawn twice, and
>> possibly over some other
>>       # artists. So, we decrease the zorder a bit to prevent this:
>>       a.patch.zorder = -2
>>
>>
>>       # add sector lines for both dimensions:
>>       thticks = grid_helper.grid_info['lon_info'][0]
>>       rticks = grid_helper.grid_info['lat_info'][0]
>>       for th in thticks[1:-1]: # all but the first and last
>>           auxa.plot([th, th], [r0, r1], '--', c='grey', zorder=-1)
>>       for ri, r in enumerate(rticks):
>>           # plot first r line as axes border in solid black only if it
>> isn't at r=0
>>           if ri == 0 and r != 0:
>>               ls, lw, color = 'solid', 2, 'black'
>>           else:
>>               ls, lw, color = 'dashed', 1, 'grey'
>>           # From http://stackoverflow.com/a/19828753/2020363
>>           auxa.add_artist(plt.Circle([0, 0], radius=r, ls=ls, lw=lw,
>> color=color, fill=False,
>>                           transform=auxa.transData._b, zorder=-1))
>>
>>       return auxa
>>
>>
>> if __name__ == '__main__':
>>       f1 = plt.figure(facecolor='white', figsize=(16/2.54, 12/2.54),
>> dpi=600)
>>       a1 = fractional_polar_axes(f1, thlim=(-90, 90),step=(10,
>> 0.2),theta_offset=90)
>>       # example spiral plot:
>>       thstep = 10
>>       th = np.arange(-90, 90+thstep, thstep) # deg
>>       rstep = 1/(len(th)-1)
>>       r = np.arange(0, 1+rstep, rstep)
>>       a1.plot(th, r, 'b')
>>
>>
>>       f1.show()
>>
>>       f2 = plt.figure(facecolor='white', figsize=(16/2.54, 12/2.54),
>> dpi=600)
>>       a2 = fractional_polar_axes(f2, thlim=(-90,
>> 90),rlim=(0,30),step=(10, 8),theta_offset=90)
>>       # example spiral plot:
>>       r2 = 20 * np.log10(r) +30
>>       a2.plot(th, r2, 'b')
>>
>>       f2.show()
>>
>>       f3 = plt.figure(facecolor='white', figsize=(16/2.54, 12/2.54),
>> dpi=600)
>>       a3 = fractional_polar_axes(f2, thlim=(-90, 90),rlim=(-30,0),
>> step=(10, 8),theta_offset=90)
>>       # example spiral plot:
>>       r3 = 20 * np.log10(r)
>>       a3.plot(th, r2, 'b')
>>
>>       f2.show()
>>
>> [\code]
>>
>> --
>>
>>
>> ------------------------------------------------------------
>> ------------------
>> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
>> Develop your own process in accordance with the BPMN 2 standard
>> Learn Process modeling best practices with Bonita BPM through live
>> exercises
>> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual-
>> event?utm_
>> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
>> _______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>
>


-- 
wissenschaftlicher Mitarbeiter
Lehrstuhl Allgemeine Elektrotechnik und Messtechnik (AEMT)
Fakultät Maschinenbau, Elektrotechnik und Wirtschaftsingenieurwesen
Brandenburgische Technische Universität Cottbus
Siemens-Halske-Ring 14
D-03046 Cottbus

Tel.: +49-355-69-3425
Fax:  +49-355-69-4104

http://www.tu-cottbus.de/fakultaet3/de/elektrotechnik-messtechnik/

------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to