Python 设置plt.ylim时极坐标图填充不正确

Python 设置plt.ylim时极坐标图填充不正确,python,matplotlib,Python,Matplotlib,我正在尝试设置我一直在研究的几个极坐标图的ylim。问题是,当我在函数内部更改plt.ylim时,连接极坐标图内部形状的填充和线条会断开连接。我不明白这是为什么。我在下面附上了一个截图 有人对如何解决这个问题有什么建议吗?我在下面插入了我的函数和示例数据框 import matplotlib.pyplot as plt import pandas as pd def make_spider(row, title, color): import math categ

我正在尝试设置我一直在研究的几个极坐标图的ylim。问题是,当我在函数内部更改
plt.ylim
时,连接极坐标图内部形状的填充和线条会断开连接。我不明白这是为什么。我在下面附上了一个截图

有人对如何解决这个问题有什么建议吗?我在下面插入了我的函数和示例数据框

import matplotlib.pyplot as plt
import pandas as pd    

def make_spider(row, title, color):

    import math

    categories = list(df)
    N = len(categories)

    angles = [n / float(N) * 2 * math.pi for n in range(N)]
    angles += angles[:1]

    ax = plt.subplot(1, 5, row+1, polar=True)

    plt.xticks(angles[:-1], categories, color='grey', size=8)

    values = df.iloc[row].values.flatten().tolist()
    values += values[:1]

    ax.plot(angles, values, color=color, linewidth=2, linestyle='solid')
    ax.fill(angles, values, color=color, alpha = .4)

    # here is the problematic line of code
    plt.ylim(-.3, .4)

my_dpi = 40

plt.figure(figsize=(1000/my_dpi, 1000/my_dpi), dpi=96)

my_palette = plt.cm.get_cmap('Set2', len(df.index)+1)

for row in range(0, len(df.index)):
     make_spider( row  = row, title='Cluster: ' + str(row), color=my_palette(row) )
数据帧示例:

df = pd.DataFrame.from_dict({"no_rooms":{"0":-0.3470532925,"1":-0.082144001,"2":-0.082144001,"3":-0.3470532925,"4":-0.3470532925},"total_area":{"0":-0.1858487321,"1":-0.1685491141,"2":-0.1632483955,"3":-0.1769700284,"4":-0.0389887094},"car_park_spaces":{"0":-0.073703681,"1":-0.073703681,"2":-0.073703681,"3":-0.073703681,"4":-0.073703681},"house_price":{"0":-0.2416123064,"1":-0.2841806825,"2":-0.259622004,"3":-0.3529449824,"4":-0.3414842657},"pop_density":{"0":-0.1271390651,"1":-0.3105853643,"2":-0.2316607937,"3":-0.3297832328,"4":-0.4599021194},"business_rate":{"0":-0.1662745006,"1":-0.1426329043,"2":-0.1577528867,"3":-0.163560133,"4":-0.1099718326},"noqual_pc":{"0":-0.0251535462,"1":-0.1540641646,"2":-0.0204666924,"3":-0.0515740013,"4":-0.0445135996},"level4qual_pc":{"0":-0.0826103951,"1":-0.1777759951,"2":-0.114263357,"3":-0.1787044751,"4":-0.2709496389},"badhealth_pc":{"0":-0.105481688,"1":-0.1760349683,"2":-0.128215043,"3":-0.1560577648,"4":-0.1760349683}})

极轴具有
set\u rmax()
功能。将
plt.ylim()
行更改为

plt.gca().set_rmax(.4)

解决了此问题。

极轴具有
set\u rmax()
功能。将
plt.ylim()
行更改为

plt.gca().set_rmax(.4)

解决了这个问题。

这里的问题是,当线超出轴限制时,它们会被“吃掉”。当您设置
plt.ylim(-.3.4)
时,最后两个图表中有一些点超出此范围,即
-0.3
以下。要显示这些点,您需要设置限制以包括这些点。例如

plt.ylim(-.5, .4)

在下面,我还将径向栅格的间距设置为0.2,以使此绘图看起来不那么拥挤。完整的可运行示例:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np    


def make_spider(df, row, title, color):
    categories = list(df)
    N = len(categories)

    angles = [n / float(N) * 2 * np.pi for n in range(N)]
    angles += angles[:1]

    ax = plt.subplot(1, 5, row+1, polar=True)

    plt.xticks(angles[:-1], categories, color='grey', size=8)
    plt.yticks(np.arange(-.4,.5,.2))
    plt.ylim(-.5, .4)

    values = df.iloc[row].values.flatten().tolist()
    values += values[:1]

    ax.plot(angles, values, color=color, linewidth=2, linestyle='solid')
    ax.fill(angles, values, color=color, alpha = .4)



df = pd.DataFrame.from_dict(
        {"no_rooms":{"0":-0.3470532925,"1":-0.082144001,"2":-0.082144001,
                     "3":-0.3470532925,"4":-0.3470532925},
        "total_area":{"0":-0.1858487321,"1":-0.1685491141,"2":-0.1632483955,
                      "3":-0.1769700284,"4":-0.0389887094},
        "car_park_spaces":{"0":-0.073703681,"1":-0.073703681,"2":-0.073703681,
                           "3":-0.073703681,"4":-0.073703681},
        "house_price":{"0":-0.2416123064,"1":-0.2841806825,"2":-0.259622004,
                       "3":-0.3529449824,"4":-0.3414842657},
        "pop_density":{"0":-0.1271390651,"1":-0.3105853643,"2":-0.2316607937,
                       "3":-0.3297832328,"4":-0.4599021194},
        "business_rate":{"0":-0.1662745006,"1":-0.1426329043,"2":-0.1577528867,
                         "3":-0.163560133,"4":-0.1099718326},
        "noqual_pc":{"0":-0.0251535462,"1":-0.1540641646,"2":-0.0204666924,
                     "3":-0.0515740013,"4":-0.0445135996},
        "level4qual_pc":{"0":-0.0826103951,"1":-0.1777759951,"2":-0.114263357,
                         "3":-0.1787044751,"4":-0.2709496389},
        "badhealth_pc":{"0":-0.105481688,"1":-0.1760349683,"2":-0.128215043,
                        "3":-0.1560577648,"4":-0.1760349683}})

my_dpi = 40

plt.figure(figsize=(1000/my_dpi, 1000/my_dpi), dpi=96)

my_palette = plt.cm.get_cmap('Set2', len(df.index)+1)

for row in range(0, len(df.index)):
     make_spider(df, row  = row, title='Cluster: ' + str(row), color=my_palette(row) )

plt.show()

这里的问题是,当这些线超出轴的限制时,它们会被“吃掉”。当您设置
plt.ylim(-.3.4)
时,最后两个图表中有一些点超出此范围,即
-0.3
以下。要显示这些点,您需要设置限制以包括这些点。例如

plt.ylim(-.5, .4)

在下面,我还将径向栅格的间距设置为0.2,以使此绘图看起来不那么拥挤。完整的可运行示例:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np    


def make_spider(df, row, title, color):
    categories = list(df)
    N = len(categories)

    angles = [n / float(N) * 2 * np.pi for n in range(N)]
    angles += angles[:1]

    ax = plt.subplot(1, 5, row+1, polar=True)

    plt.xticks(angles[:-1], categories, color='grey', size=8)
    plt.yticks(np.arange(-.4,.5,.2))
    plt.ylim(-.5, .4)

    values = df.iloc[row].values.flatten().tolist()
    values += values[:1]

    ax.plot(angles, values, color=color, linewidth=2, linestyle='solid')
    ax.fill(angles, values, color=color, alpha = .4)



df = pd.DataFrame.from_dict(
        {"no_rooms":{"0":-0.3470532925,"1":-0.082144001,"2":-0.082144001,
                     "3":-0.3470532925,"4":-0.3470532925},
        "total_area":{"0":-0.1858487321,"1":-0.1685491141,"2":-0.1632483955,
                      "3":-0.1769700284,"4":-0.0389887094},
        "car_park_spaces":{"0":-0.073703681,"1":-0.073703681,"2":-0.073703681,
                           "3":-0.073703681,"4":-0.073703681},
        "house_price":{"0":-0.2416123064,"1":-0.2841806825,"2":-0.259622004,
                       "3":-0.3529449824,"4":-0.3414842657},
        "pop_density":{"0":-0.1271390651,"1":-0.3105853643,"2":-0.2316607937,
                       "3":-0.3297832328,"4":-0.4599021194},
        "business_rate":{"0":-0.1662745006,"1":-0.1426329043,"2":-0.1577528867,
                         "3":-0.163560133,"4":-0.1099718326},
        "noqual_pc":{"0":-0.0251535462,"1":-0.1540641646,"2":-0.0204666924,
                     "3":-0.0515740013,"4":-0.0445135996},
        "level4qual_pc":{"0":-0.0826103951,"1":-0.1777759951,"2":-0.114263357,
                         "3":-0.1787044751,"4":-0.2709496389},
        "badhealth_pc":{"0":-0.105481688,"1":-0.1760349683,"2":-0.128215043,
                        "3":-0.1560577648,"4":-0.1760349683}})

my_dpi = 40

plt.figure(figsize=(1000/my_dpi, 1000/my_dpi), dpi=96)

my_palette = plt.cm.get_cmap('Set2', len(df.index)+1)

for row in range(0, len(df.index)):
     make_spider(df, row  = row, title='Cluster: ' + str(row), color=my_palette(row) )

plt.show()

那么,如何让
r
-.3
开始呢?@ImportanceOfBeingEarnest-.3的半径意味着什么?在这种情况下,不知道。一般来说,这意味着
y
的值为
-0.3
@ImportanceOfBeingEarnest,这是一个极坐标图。没有负半径。我不明白。关于(1)有一个用例,在其中一个问题中,有人想要绘制天线响应曲线。我认为这很有道理。那么你如何让
r
-.3
开始呢?@ImportanceOfBeingEarnest-.3的半径意味着什么?在这种情况下,我不知道。一般来说,这意味着
y
的值为
-0.3
@ImportanceOfBeingEarnest,这是一个极坐标图。没有负半径。我不明白。关于(1)有一个用例,在其中一个问题中,有人想要绘制天线响应曲线。我认为这很有道理。