Estoy haciendo un gráfico de barras apiladas de usar:

DataFrame.plot(kind='bar',stacked=True)

Quiero controlar la anchura de las barras, de modo que las barras están conectados el uno al otro como un histograma.

He mirado a través de la documentación, pero fue en vano – alguna sugerencia? Es posible hacerlo de esta manera?

  • Quieres pasar en anchura=1 (en bar) pero la trama no te deja… :s
  • Extraño. El alinear palabra clave se comporta como el opuesto de la mpl y el registro de palabras clave también es raro. @Osmond, yo sería la solución mediante el uso de: ax.bar(df.índice.valores, df.los valores)

2 Comentarios

  1. 61

    Para cualquier persona que viene a través de esta pregunta:

    Desde pandas 0.14, creación de gráficos con barras tiene un ‘ancho’ comando:
    https://github.com/pydata/pandas/pull/6644

    El ejemplo anterior, ahora se pueden resolver simplemente mediante el uso de

    df.plot(kind='bar', stacked=True, width=1)
  2. 14

    Si creo que hay que «postproceso» el barplot con matplotlib como pandas internamente establece el ancho de las barras.

    Los rectángulos que forman las barras están en el contenedor de objetos.
    Así que usted tiene que iterar a través de estos contenedores y establecer el ancho de los rectángulos de forma individual:

    In [208]: df = pd.DataFrame(np.random.random((6, 5)) * 10,               
                            index=list('abcdef'), columns=list('ABCDE'))
    
    In [209]: df
    Out[209]: 
         A    B    C    D    E
    a  4.2  6.7  1.0  7.1  1.4
    b  1.3  9.5  5.1  7.3  5.6
    c  8.9  5.0  5.0  6.7  3.8
    d  5.5  0.5  2.4  8.4  6.4
    e  0.3  1.4  4.8  1.7  9.3
    f  3.3  0.2  6.9  8.0  6.1
    
    In [210]: ax = df.plot(kind='bar', stacked=True, align='center')
    
    In [211]: for container in ax.containers:
                  plt.setp(container, width=1)
       .....:         
    
    In [212]: x0, x1 = ax.get_xlim()
    
    In [213]: ax.set_xlim(x0 -0.5, x1 + 0.25)
    Out[213]: (-0.5, 6.5)
    
    In [214]: plt.tight_layout()

    Modificar el ancho de las barras mediante dataframe.plot() con la función de matplotlib

    • bonita respuesta. Yo no me di cuenta ‘postprocesado’ era una opción
    • Yo estoy usando el df.parcela a overplot barras adicionales en un preexistentes gráfico de barras. @bmu, su método no funciona para mí, ya que cambia todos los viejos parcela de objetos, además de los nuevos. Cómo cambiar el ancho de sólo de los bares de la recién creada por la df.plot()?
    • Tal vez usted podría comenzar la iteración en el contenedor de objetos en una tarde de índice (en el número de su anterior contenedor de objetos), sin embargo, un ejemplo podría ser mejor. Creo que lo mejor será preguntar esto en una pregunta aparte.

Dejar respuesta

Please enter your comment!
Please enter your name here