【问题标题】:How can I rearrage x label in Seaborn Graph in Python如何在 Python 中重新排列 Seaborn Graph 中的 x 标签
【发布时间】:2020-06-11 20:07:39
【问题描述】:

我有一个关于在 seaborn 中重新排列 x 标签中的值的问题。

这是我的数据框示例,如下所示。

    index   year    value
0   0      -2150    1
1   1      -2000    2
2   2      -1610    1
3   3      -1400    5
...
946 946     2018    20
947 947     2019    23
948 948     2020    9

这是我的seaborn代码

plt.figure(figsize=(15,8))
sns.barplot(data=df, x = "year" , y = 'value')
plt.title("Graph", fontsize = 14)
plt.tight_layout()
plt.show()

所有年份值都按顺序列出,不使用比例或范围。

我可以使用 plt.xticks 但它不起作用。

我想在 x 标签中获得像 -2150,-1500,-1000,-500,0,500,1000,500,1500,2000,2020 这样的订单

我该如何解决?

【问题讨论】:

    标签: python seaborn


    【解决方案1】:

    Seaborn 创建条形图,每个条目具有相同的空间,无论年份是否靠近。如此有效地使用分类 x 轴。在内部,刻度编号为0, 1, 2, 3, ...

    您可以创建所需标签的列表,然后找到年份中最接近的匹配值用作标签。数组中匹配的索引也是相应柱的内部x值。

    from matplotlib import pyplot as plt
    import pandas as pd
    import numpy as np
    import seaborn as sns
    
    years = np.sort(np.unique( np.concatenate([np.random.randint(-2150, 1980, 900), np.arange(1990, 2021)])))
    df = pd.DataFrame({'year': years, 'value': np.random.randint(1, 20, years.size)})
    
    desired_ticks = [-2150] + list(range(-1500, 2001, 500)) + [2020]
    np_years = df.year.to_numpy(dtype=np.int)
    desired_ticks_idx = [np.argmin(np.abs(np_years - t)) for t in desired_ticks]
    
    plt.figure(figsize=(15, 8))
    sns.barplot(data=df, x="year", y='value')
    plt.xticks(desired_ticks_idx, np_years[desired_ticks_idx])
    plt.title("Graph", fontsize=14)
    plt.tight_layout()
    plt.show()
    

    (实际上,Seaborn 的条形图并不适用于需要比 x 轴上的标签数量更多条形的图,可选择将它们旋转 90 度。线图或茎图可能是替代方案。)

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 2020-11-26
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2020-10-09
      相关资源
      最近更新 更多