2016-05-07 15 views
1

Ich habe auf SO auf ähnlichen Inhalten durch Bündel von Fragen gegangen und las Anatomie zu verstehen noch bin ich nicht in der Lage Lösung, um herauszufinden, wie die label.Other Quellen Link1 bezeichnet drehen Link2Link3 Unten ist mein Aufwandrotierende xticks in Python

fig, ax = plt.subplots() 

# Although I have commented out this part it would be great to know what is wrong with it 
#xaxis = myfiledic.keys() 
#yaxis = myfiledic.values() 
#ax.plot(xaxis, yaxis) 

plt.bar(range(len(myfiledic)), myfiledic.values()) 
plt.xticks(range(len(myfiledic)), myfiledic.keys()) 

for line in ax.xaxis.get_majorticklabels(): 
    print line 
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=45) 

plt.show() 

Die Druckzeile zeigt auf unter Ausgabe. Ich versuche nur, einige Dateien mit C-Code und Anzahl der Zeilen darin zu plotten. So xlabel ist der Name der Datei, die ich erwartet hatte und unten ist, was ich bin immer

Text(0,0,'add_2_arrays.c') 
Text(0,0,'bst.c') 
Text(0,0,'sort_string_array.c') 
Text(0,0,'palindrome_int.c') 

Antwort

0

Ich bin nicht sicher, ich verstehe, was Ihre Frage ist. Wenn ich Ihren Code ausführe, erhalte ich ein Balkendiagramm mit schön gedrehten Etiketten, genau wie Sie es verlangt haben.

Hier ist der Code mit einigen Änderungen an, dass es ein Minimum Arbeitsbeispiel ist:

Beachten Sie, dass ich align='center' zum plt.bar Befehl hinzugefügt, um die Balken auf den Häkchen zentrieren zu bekommen, anstatt linksbündig auf es.

import matplotlib.pyplot as plt 
myfiledic = { 
    'add_2_arrays.c': 1000, 
    'bst.c': 1024, 
    'sort_string_array.c': 42, 
    'palindrome_int.c': 666, 
} 

fig, ax = plt.subplots() 

plt.bar(range(len(myfiledic)), myfiledic.values(), align='center') 
plt.xticks(range(len(myfiledic)), myfiledic.keys()) 

for line in ax.xaxis.get_majorticklabels(): 
    print line 
ax.set_xticklabels(ax.xaxis.get_majorticklabels(), rotation=45) 
# Make more room for the labels 
plt.subplots_adjust(bottom=0.25) 

plt.show() 

resulting figure

Beachten Sie, dass die Reihenfolge von Daten aus einer dict erhalten in beliebig ist, so dass, wenn Sie die Zahlen in einer bestimmten Reihenfolge erhalten müssen es besser ist, eine OrderedDict zu verwenden: from collections import OrderedDict und dann setzen Daten in die Reihenfolge, in der Sie es wieder lesen möchten.

Wie für dieses Bit:

# Although I have commented out this part it would be great to know what is wrong with it 
#xaxis = myfiledic.keys() 
#yaxis = myfiledic.values() 
#ax.plot(xaxis, yaxis) 

Was falsch ist, ist, dass xaxis eine Liste von Strings ist:

In [44]: xaxis 
Out[44]: ['sort_string_array.c', 'sort_string_array.cS', 'bst.c', 'add_2_arrays.c'] 

In [45]: yaxis 
Out[45]: [42, 666, 1024, 1000] 

Das Grundstück (x, y) Funktion stellt Punkte in den Achsen nach Zahlen in x und y. Die Zeichenfolge 'sort_string_array.c' ist keine Zahl, daher ist es nicht sinnvoll, sie in einem Befehl plot() zu verwenden.