Removing space around wedge polar plots in Matplotlib

后端 未结 1 1024
臣服心动
臣服心动 2020-12-21 00:45

I am starting to play around with creating polar plots in Matplotlib that do NOT encompass an entire circle - i.e. a \"wedge\" plot - by setting the thetamin an

相关标签:
1条回答
  • 2020-12-21 01:11

    It seems the wedge of the "truncated" polar axes is placed such that it sits in the middle of the original axes. There seems so be some constructs called LockedBBox and _WedgeBbox in the game, which I have never seen before and do not fully understand. Those seem to be created at draw time, such that manipulating them from the outside seems somewhere between hard and impossible.

    One hack can be to manipulate the original axes such that the resulting wedge turns up at the desired position. This is not really deterministic, but rather looking for some good values by trial and error.

    The parameters to adjust in this case are the figure size (figsize), the padding of the labels (labelpad, as already pointed out in the question) and finally the axes' position (ax.set_position([left, bottom, width, height])).

    The result could then look like

    import numpy as np
    import matplotlib.pyplot as plt
    
    # get a half circle polar plot
    fig1, ax1 = plt.subplots(1, 1, figsize=(6,3.4), subplot_kw={'projection': 'polar'})
    theta_min = 1.e-9
    theta_max = np.pi
    
    theta = np.linspace(theta_min, theta_max, 181)
    data = (1/6.)*np.abs(np.sin(3*theta)/np.sin(theta/2.))
    
    # set 'thetamin' and 'thetamax' according to data
    ax1.set_thetamin(0)
    ax1.set_thetamax(theta_max*180./np.pi)
    
    # actually plot the data, fine tune radius limits and add labels
    ax1.plot(theta, data)
    ax1.set_ylim([0, 1])
    ax1.set_xlabel('Magnitude', fontsize=15, labelpad=-60)
    ax1.set_ylabel('Angles', fontsize=15)
    
    ax1.set_position( [0.1, -0.45, 0.8, 2])
    
    plt.show()
    

    Here I've set some color to the background of the figure to better see the boundary.

    0 讨论(0)
提交回复
热议问题