У меня есть многоуровневый индексный фрейм, который я пытаюсь отобразить в Seaborn. Сюжет показывает тонкий, но значения оси x обрабатываются как текстовые метки вместо фактических значений x. Фрагмент кода ниже показывает, как выборка данных производится и наносили на график:X-Axis неправильно расположен в 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()
график показывает вверх:
Тем не менее, ось х с использованием численных значений в виде текстовых меток. Я хотел бы, чтобы ось х отображала экспоненциальную прогрессию, как ожидалось, из значений (то есть 1000 должно быть в 10 раз дальше от 100, чем 100 - от 10). Как я могу это исправить?
Я подозреваю, что мультииндекс не имеет отношения к проблеме, но, возможно, тип данных, которые он интерпретирует, является значительным. Аналогичная проблема, похоже, происходит здесь: seaborn boxplots at desired distances along the x axis. Я не думаю, что это дубликат, но если сообщество не соглашается, я буду признателен за краткое объяснение того, как применить его к моему делу.
Спасибо. Это именно то, что я искал. Таким образом, «ax.set_ * scale» может применяться по желанию. В случае, если вам интересно, у меня есть некоторые данные, которые были получены в квазилогарифмических интервалах, но должны показывать линейную зависимость на регулярном графике. Как только я проведу линейную зависимость, я, вероятно, возьму ваш совет и сделаю полулогарифмический или логарифмический график, если линейный неадекватен. –
Кстати, я читаю вашу часть об импорте правильно? Изменяет ли импорт морского судна значения по умолчанию для последующих регулярных графиков matplotlib? –
Правильно - при импорте seaborn он перезапишет значения matplotlib по умолчанию для этого сеанса или пока вы не измените эти настройки вручную. – Primer