代码之家  ›  专栏  ›  技术社区  ›  Guillermo

旋转标签xin seaborn(小型多时间序列)[重复]

  •  0
  • Guillermo  · 技术社区  · 1 年前

    过去,我创建了一个图形,其中x轴上的所有标签都以垂直格式显示。

    https://i.stack.imgur.com/5RSci.jpg

    几天后,相同的代码不再显示标签;这让他们一片空白。我做了一些更正,并设法只旋转了最后一张图片上的标签。

    https://i.stack.imgur.com/kMJWY.jpg

    data

    这是代码

    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    # Leer el archivo Excel
    df = pd.read_excel('demanda2.xlsx')
    
    # Seleccionar las columnas relevantes (Año y meses)
    columnas_meses = ['Año', 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']
    df_meses = df[columnas_meses]
    
    # Reorganizar el DataFrame para ser compatible con Seaborn
    df_meses_melted = pd.melt(df_meses, id_vars='Año', var_name='Mes', value_name='KWh')
    
    # Configurar tema y estilo de Seaborn
    sns.set_theme(style="dark")
    
    # Plot cada serie temporal de años en su propia faceta
    g = sns.relplot(
        data=df_meses_melted,
        x="Mes", y="KWh", col="Año", hue="Año",
        kind="line", palette="crest", linewidth=4, zorder=5,
        col_wrap=3, height=3, aspect=2, legend=False,  # Ajustar height y aspect
    )
    
    # Iterar sobre cada subplot para personalizar aún más
    for año, ax in g.axes_dict.items():
        # Añadir el título como una anotación dentro del gráfico
        ax.text(.8, .85, año, transform=ax.transAxes, fontweight="bold")
    
        # Plot de todas las series temporales de años en el fondo
        sns.lineplot(
            data=df_meses_melted, x="Mes", y="KWh", units="Año",
            estimator=None, color=".7", linewidth=1, ax=ax,
        )
    
        # Reducir la frecuencia de las marcas en el eje x
    ax.set_xticks(ax.get_xticks()[::1])
    
        # Hacer que las etiquetas del eje x se vean en formato vertical
    ax.set_xticklabels(ax.get_xticklabels(), rotation=90, ha='center')
    
    # Ajustar los aspectos de soporte del gráfico
    g.set_titles("")
    g.set_axis_labels("", "MW")
    g.tight_layout()
    

    为了能够看到第一张图片中的标签,我不确定我的Jupyter笔记本在重新安装所有东西后是否配置错误。

    Seaborn画廊的例子也出现了同样的问题。 https://seaborn.pydata.org/examples/timeseries_facets.html

    Image Example

    1 回复  |  直到 1 年前
        1
  •  0
  •   Oskar Hofmann    1 年前

    旋转的标签 ax 在for循环之外。这只是最后一次 Axes 循环的对象,因此是最后一个绘图。此外,最好使用 ax.tick_params() :

    使用

    ax.tick_params(axis='x', rotation=90)
    

    在for循环内部:

    for año, ax in g.axes_dict.items():
        # Añadir el título como una anotación dentro del gráfico
        ax.text(.8, .85, año, transform=ax.transAxes, fontweight="bold")
    
        # Plot de todas las series temporales de años en el fondo
        sns.lineplot(
            data=df_meses_melted, x="Mes", y="KWh", units="Año",
            estimator=None, color=".7", linewidth=1, ax=ax,
        )
    
        ax.tick_params(axis='x', rotation=90)
    
    # Reducir la frecuencia de las marcas en el eje x
    ax.set_xticks(ax.get_xticks()[::1])
    
    
    # Ajustar los aspectos de soporte del gráfico
    g.set_titles("")
    g.set_axis_labels("", "MW")
    g.tight_layout()
    

    另请参阅: Rotate label text in seaborn