2017-12-13 2 views
0

Ich habe ein Balkendiagramm, wobei die Y-Achse die Liste der Monate von Jan bis Dezember ist und die X-Achsenwerte in einer anderen Liste in der entsprechenden Reihenfolge gespeichert werden. Wenn ich die Grafik grafisch darstelle, wird die Reihenfolge der Monate durcheinander gebracht.Falsche Reihenfolge der Matplotlib-Balken

In: 

fig, ((ax1, ax2)) = plt.subplots(nrows=1, ncols=2, figsize=(10,5), sharex='row') 

fig.suptitle("Income from members and supporters", fontsize=14) 

ax1.barh(months, tag_max) 
ax1.set_facecolor('white') 
ax1.set_title("Maximum income from members") 

ax2.barh(months, tam_max) 
ax2.set_facecolor('white') 
ax2.get_yaxis().set_visible(False) 
ax2.set_title('Maximum income from supporters') 

Out:

enter image description here

In: 

    months 

Out: 

    ['January', 
    'February', 
    'March', 
    'April', 
    'May', 
    'June', 
    'July', 
    'August', 
    'September', 
    'October', 
    'November', 
    'December'] 

, was der Grund sein kann, und wie kann ich es beheben? Danke!

+2

Der Grund dafür ist, dass Ihre y-Achse sind Saiten. Matplotlib sortiert dann automatisch diese alphabetisch. – DavidG

Antwort

0

Der Kommentar von DavidG ist korrekt. Sie können mit numerischen Werten für Ihre Bar Position, um das Problem zu bekommen und zuweisen die Monate als yticklabels

from matplotlib import pyplot as plt 
import numpy as np 

months = [ 
    'January', 
    'February', 
    'March', 
    'April', 
    'May', 
    'June', 
    'July', 
    'August', 
    'September', 
    'October', 
    'November', 
    'December' 
] 

tag_max = np.random.rand(len(months)) 
tam_max = np.random.rand(len(months)) 

yticks = [i for i in range(len(months))] 

fig, ((ax1, ax2)) = plt.subplots(nrows=1, ncols=2, figsize=(10,5), sharex='row') 

fig.suptitle("Income from members and supporters", fontsize=14) 

ax1.barh(yticks, tag_max) 
ax1.set_facecolor('white') 
ax1.set_title("Maximum income from members") 
ax1.set_yticks(yticks) 
ax1.set_yticklabels(months) 


ax2.barh(yticks, tam_max) 
ax2.set_facecolor('white') 
ax2.get_yaxis().set_visible(False) 
ax2.set_title('Maximum income from supporters') 

plt.show() 

Das folgende Ausgabe gibt:

result of the given code

+1

Hah ich habe nicht daran gedacht, vielen Dank! –

Verwandte Themen