极坐标图 x 轴刻度标签位置

4

我有一个使用matplotlib生成极坐标图的函数。

from math import pi

import matplotlib as mpl
import matplotlib.pyplot as plt

first_arg = {
    'Introversion': 17, 'Intuition': 34, 'Feeling': 29, 'Perceiving': 18,
    'Extraversion': 27, 'Sensing': 25, 'Thinking': 23, 'Judging': 16
}
second_arg =  {
    'Introversion': 16, 'Intuition': 25, 'Feeling': 31, 'Perceiving': 15,
    'Extraversion': 22, 'Sensing': 29, 'Thinking': 23, 'Judging': 23
}


def plot_scales_chart(*args):
    scales = [
        'Introversion', 'Intuition', 'Feeling', 'Perceiving',
        'Extraversion', 'Sensing', 'Thinking', 'Judging'
    ]
    angles = [n / float(len(scales)) * 2 * pi for n in range(len(scales))]
    angles += angles[:1]

    mpl.use('agg')

    ax = plt.subplot(polar=True)

    ax.set_theta_offset(pi / 2)
    ax.set_theta_direction(-1)

    plt.xticks(angles[:-1], scales)

    ax.set_rlabel_position(0)
    plt.yticks([15, 25], ["15", "25"], color="grey", size=8)
    plt.ylim(0, 35)

    colors = ['#5159be', '#86e5c7']

    for i, arg in enumerate(args):
        values = []
        for scale in scales:
            values.append(arg[scale])
        values += values[:1]
        ax.plot(angles, values, alpha=0.7, color=colors[i], linewidth=0, linestyle='solid')
        ax.fill(angles, values, colors[i], alpha=0.7)
    
    plt.savefig('chart.png')

enter image description here

我希望将x轴标签移动,以避免穿过圆圈。
如何设置特定刻度的标签位置,或者是否可以将所有标签都从中心进一步移开?那里最好的做法是什么?
1个回答

0
你可以使用ax.tick_params来添加填充以将标签“移开”中心。在plt.xticks()中设置xticks后,添加ax.tick_params(axis='x', which='major', pad=15)这一行代码即可解决问题。
from math import pi

import matplotlib as mpl
import matplotlib.pyplot as plt

first_arg = {
    'Introversion': 17, 'Intuition': 34, 'Feeling': 29, 'Perceiving': 18,
    'Extraversion': 27, 'Sensing': 25, 'Thinking': 23, 'Judging': 16
}
second_arg =  {
    'Introversion': 16, 'Intuition': 25, 'Feeling': 31, 'Perceiving': 15,
    'Extraversion': 22, 'Sensing': 29, 'Thinking': 23, 'Judging': 23
}


def plot_scales_chart(*args):
    scales = [
        'Introversion', 'Intuition', 'Feeling', 'Perceiving',
        'Extraversion', 'Sensing', 'Thinking', 'Judging'
    ]
    angles = [n / float(len(scales)) * 2 * pi for n in range(len(scales))]
    angles += angles[:1]

    mpl.use('agg')

    ax = plt.subplot(polar=True)

    ax.set_theta_offset(pi / 2)
    ax.set_theta_direction(-1)

    plt.xticks(angles[:-1], scales)
    ax.tick_params(axis='x', which='major', pad=15)

    ax.set_rlabel_position(0)
    plt.yticks([15, 25], ["15", "25"], color="grey", size=8)
    plt.ylim(0, 35)

    colors = ['#5159be', '#86e5c7']

    for i, arg in enumerate(args):
        values = []
        for scale in scales:
            values.append(arg[scale])
        values += values[:1]
        ax.plot(angles, values, alpha=0.7, color=colors[i], linewidth=0, linestyle='solid')
        ax.fill(angles, values, colors[i], alpha=0.7)

    plt.savefig('chart.png')

fig_example


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接