Search code examples
pythonpandasmatplotlibfpdf2

Sorting axis in pandas plot


How can I sort the axis in descending order? I tried the following and it did not work:

from io import BytesIO
from fpdf import FPDF
import pandas as pd
import matplotlib.pyplot as plt
import io

DATA = {
    'x': ['val_1', 'val_2', 'val_3', 'val_4', 'val_5'],
    'y': [1, 2, 3, 4, 5]
}

COLUMNS = tuple(DATA.keys())

plt.figure()
df = pd.DataFrame(DATA, columns=COLUMNS)
df.sort_values(['y'], ascending=[False]).plot(x=COLUMNS[0], y=COLUMNS[1], kind="barh", legend=False)

img_buf = BytesIO()
plt.savefig(img_buf, dpi=200)

pdf = FPDF()
pdf.add_page()
pdf.image(img_buf, w=pdf.epw)
pdf.output('output.pdf')
img_buf.close()

Solution

  • Or just change ascending = [False] to ascending = [True]:

    import pandas as pd
    import matplotlib.pyplot as plt
    
    DATA = {
        'x': ['val_1', 'val_2', 'val_3', 'val_4', 'val_5'],
        'y': [1, 2, 3, 2.5, 0.5]
    }
    
    COLUMNS = tuple(DATA.keys())
    
    
    df = pd.DataFrame(DATA, columns=COLUMNS)
    df.sort_values(['y'], ascending=[True]).plot(x=COLUMNS[0], y=COLUMNS[1], kind="barh", legend=False)
    
    plt.show()
    

    enter image description here