Ich habe einen mehrstufigen indizierten Datenrahmen, den ich versuche, in Seaborn anzuzeigen. Das Diagramm wird angezeigt, aber die Werte der X-Achse werden als Textbeschriftungen anstelle von tatsächlichen X-Werten behandelt. Die Schnipsel unten zeigt, wie Abtastdaten hergestellt und aufgetragen:X-Achse ist nicht korrekt in Seaborn
>>> import numpy, pandas, seaborn
>>> from matplotlib import pyplot
>>> index = pandas.MultiIndex.from_product((list('abc'), [10**x for x in range(4)]), names=['letters', 'powers'])
>>> index
MultiIndex(levels=[['a', 'b', 'c'], [1, 10, 100, 1000]],
labels=[[0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]],
names=['letters', 'powers'])
>>> df = pandas.DataFrame(numpy.random.randn(12, 2), index=index, columns=['x', 't'])
>>> df
x t
letters powers
a 1 1.764052 0.400157
10 0.978738 2.240893
100 1.867558 -0.977278
1000 0.950088 -0.151357
b 1 -0.103219 0.410599
10 0.144044 1.454274
100 0.761038 0.121675
1000 0.443863 0.333674
c 1 1.494079 -0.205158
10 0.313068 -0.854096
100 -2.552990 0.653619
1000 0.864436 -0.742165
>>> seaborn.factorplot(x='powers', y='t', hue='letters', data=df.reset_index())
>>> pyplot.show()
Der Plot zeigt sich:
jedoch die x-Achse ist die numerische Werte als Textetiketten verwenden. Ich möchte, dass die x-Achse eine exponentielle Progression zeigt, wie es von den Werten erwartet wird (d. H. 1000 sollte 10 mal weiter von 100 als 100 von 10 sein). Wie kann ich das beheben?
Ich vermute, dass der Multi-Index für das Problem nicht relevant ist, aber vielleicht wird der Datentyp, der interpretiert wird, signifikant. Ein ähnliches Problem scheint hier zu passieren: seaborn boxplots at desired distances along the x axis. Ich glaube nicht, dass es sich um ein Duplikat handelt, aber wenn die Gemeinschaft nicht einverstanden ist, würde ich mich über eine kurze Erläuterung freuen, wie ich sie in meinem Fall anwenden kann.
Danke. Genau das habe ich gesucht. Auf diese Weise kann 'ax.set_ * scale' beliebig angewendet werden. Falls Sie sich wundern, ich habe einige Daten, die in quasi-logarithmischen Intervallen aufgenommen wurden, aber eine lineare Beziehung auf einer regulären Grafik zeigen sollten. Sobald ich die lineare Beziehung verifiziert habe, werde ich wahrscheinlich Ihren Rat befolgen und ein Semilogx- oder Log-Log-Diagramm erstellen, wenn das lineare nicht ausreicht. –
Übrigens, lese ich Ihren Teil über den Import korrekt? Ändert das Importieren von Seabord die Standardwerte der nachfolgenden regulären Matplotlib-Plots? –
Das ist richtig - wenn Sie 'seaborn importieren', werden die matplotlib-Standardeinstellungen für diese Sitzung überschrieben oder bis Sie diese Einstellungen manuell ändern. – Primer