繁体   English   中英

极坐标/径向图上的刻度标签填充和刻度标签位置 - matplotlib

[英]Tick label padding and tick label position on polar / radial chart - matplotlib

我正在尝试旋转附加图上的径向刻度标签。

当我指定了“旋转”命令时,为什么 matplotlib 不旋转它们?

然后我想在径向方向上移动标签。 是否有与极坐标图等效的“pad”命令?

import numpy as np
import matplotlib.pyplot as plt
import math

Graph_title = "Radar Plot"

def radarplot():
    ax = plt.subplot(111, polar=True)

    # INPUT DATA
    n_directions = 12
    angles = [n / float(n_directions) * 2 * math.pi for n in range(n_directions)]
    data = [3.0, 3.0, 3.0, 3.0, 2.0, 2.5, 2.5, 2.5, 2.75, 2.75, 3.0, 3.0]

    # Add the last element of the list to the list. This is necessary or the line from 330 deg to 0 degree does not join up on the plot.
    angles = np.append(angles, angles[:1])
    data = np.append(data, data[:1])

    ax.plot(angles, data, linewidth=2, linestyle='solid', color = 'red')

    # Radial tick parameters
    radial_ticks = [0.00, 0.50, 1.00, 1.50, 2.00, 2.50, 3.00]
    ax.set_rlabel_position(45)
    ax.set_rorigin(0)
    plt.yticks(radial_ticks, color='black', size=8)
    ax.set_yticklabels(radial_ticks, rotation = 45, zorder = 500)

    # X Tick parameters
    plt.xticks(angles, color='black', size=10, zorder = 5)
    ax.tick_params(axis='x', which='major', pad=3)
    ax.set_theta_zero_location("N")         # Sets the labels initial position to 0 degrees
    ax.set_theta_direction("clockwise")     # Set the labels to rotate clockwise


    plt.savefig(Graph_title +".png", figsize = [6.4, 5], dpi=1000)
    plt.show()
    plt.close()

radarplot()

在此处输入图片说明

最近我想达到和你一样的目的,这是我想出的解决方案。

  1. 使用命令ax.set_yticklabels([])抑制自动 r 刻度标签
  2. 为每个径向刻度定义一个刻度列表、一个位置列表和一个对齐列表。
  3. 使用text命令在位置列表指定的径向位置写入刻度列表中的值,对齐方式由对齐列表指定。

通过更改位置列表中的值,基本上可以沿径向移动 r 个刻度。

确保使用transform=ax.transData选项指定text命令。

import numpy as np
import matplotlib.pyplot as plt
import math

Graph_title = "Radar Plot"

def radarplot():
    ax = plt.subplot(111, polar=True)

    # INPUT DATA
    n_directions = 12
    angles = [n / float(n_directions) * 2 * math.pi for n in range(n_directions)]
    data = [3.0, 3.0, 3.0, 3.0, 2.0, 2.5, 2.5, 2.5, 2.75, 2.75, 3.0, 3.0]

    # Add the last element of the list to the list. This is necessary or the line from 330 deg to 0 degree does not join up on the plot.
    angles = np.append(angles, angles[:1])
    data = np.append(data, data[:1])

    ax.plot(angles, data, linewidth=2, linestyle='solid', color = 'red')
    
    r_ticks = [0.00, 0.50, 1.00, 1.50, 2.00, 2.50, 3.00] #tick list
    r_ticks_pos = [0.20, 0.65, 1.15, 1.65, 2.15, 2.65, 3.25] #radial position list (CHANGE THESE VALUES TO MOVE EACH TICK RADIALLY INDIVIDUALLY)
    r_ticks_h_align = ['center','center','center','center','center','center','center'] #horizontal alignment list
    r_ticks_v_align = ['center','center','center','center','center','center','center'] #vertical alignment list
    r_label_angle = 45 #theta angle

    # Radial tick parameters
    ax.set_rlabel_position(r_label_angle)
    ax.set_rorigin(0)
        
    ax.set_yticklabels([])    
    

    ax.set_rticks(r_ticks)
    ax.set_rlabel_position(r_label_angle)

    #write the ticks using the text command
    for rtick, rtick_pos, rtick_ha, rtick_va in zip(r_ticks, r_ticks_pos, r_ticks_h_align, r_ticks_v_align):
        plt.text(np.radians(r_label_angle), rtick_pos, r'$'+str(rtick)+'$', ha=rtick_ha, va=rtick_va, transform=ax.transData, rotation=-45, fontsize=8)

    # X Tick parameters
    plt.xticks(angles, color='black', size=10, zorder = 5)
    ax.tick_params(axis='x', which='major', pad=3)
    ax.set_theta_zero_location("N")         # Sets the labels initial position to 0 degrees
    ax.set_theta_direction("clockwise")     # Set the labels to rotate clockwise


    plt.savefig(Graph_title +".png", figsize = [6.4, 5], dpi=1000)
    plt.show()
    plt.close()

radarplot()

结果:

在此处输入图片说明

我遇到了同样的问题,我只解决了旋转问题。 axis='x'无法控制旋转,只有axis='both'可以工作。

ax.tick_params(
        axis='both',
        labelrotation=-45.,
        )

我正在尝试解决垫问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM