2015-11-30 2 views
1

Я пытаюсь построить 3 серии с 2 по левой оси y и 1 справа, используя secondary_y, но мне непонятно, как определить правая шкала оси y, как я сделал слева, с ylim=().Невозможно управлять шкалой второй оси y на df.plot()

Я видел этот пост: Interact directly with axes

... но как только у меня есть:

import matplotlib.pyplot as plt 

df = pd.DataFrame(np.random.randn(10,3)) 

fig, ax1 = plt.subplots() 

ax2 = ax1.twinx() 
ax1.plot(df.index,df.iloc[:,[0,2]]) 
ax2.plot(df.index, df.iloc[:,2]) 

plt.show() не производит ничего вообще. Я использую:

  • Spyder 2.3.5.2
  • питон: 3.4.3.final.0
  • питон-бит: 64
  • ОС: Windows
  • OS-релиз: 7
  • панды: 0.16.2
  • NumPy: 1.9.2
  • SciPy: 0.15.1
  • matplotl И.Б.: 1.4.3

What I get for results

Я нашел эти ссылки полезны:

tcaswell, working directly with axes

matplotlib.axes documentation

+0

примечание - я просто обновлен до панды 0.17.1, matplotlib 1.4.3 – MJS

ответ

1

Вы должны использовать set_ylim на соответствующий топор.

Например:

ax2 = ax1.twinx() 
ax2.set_ylim(bottom=-10, top=10) 

Кроме того, просмотр кода, кажется, что вы указываете ваши iloc столбцы неправильно. Попробуйте:

ax1.plot(df.index, df.iloc[:, :2]) # Columns 0 and 1. 
ax2.plot(df.index, df.iloc[:, 2]) # Column 2. 
+0

привет Александр - Я вижу проблему с моими столбцами-илоками, извините за это. Можете ли вы представить себе причину, по которой вообще не было бы никакого ответа? ни plt.show(), ни plt.show (ax2) не производят никакого графика. – MJS

+0

На ваше редактирование у вас есть графика. Когда вы говорите «нет ответа», что именно вы имеете в виду? – Alexander

+0

хорошая точка, плохо сформулированная. я не смог получить результат, работающий только в консоли. ваши исправления в моем синтаксисе помогли мне вернуться на правильный путь.У меня все еще есть неплохие графики, потому что линии сетки для двух тиков оси y выключены. я добавлю другие полезные ссылки выше. Спасибо за вашу помощь. – MJS

0
import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randn(10,3)) 
print (df) 
fig, ax1 = plt.subplots() 

ax2 = ax1.twinx() 
ax1.plot(df.index,df.iloc[:,[0,2]]) 
ax2.plot(df.index, df.iloc[:,2]) 

plt.show() 
+0

hi toasteez - спасибо за ответ. Я вставил в изображение того, что я написал выше. Я должен делать что-то еще неправильно. – MJS

+0

Я запускаю Anaconda 3.5, из Pycharm ничего не отображает для меня, но если я убегу от консоли, это прекрасно. – toasteez

+0

Я ничего не могу получить от консоли iPython в Anaconda/spyder – MJS

0

Вы можете сделать это без прямого вызова ax.twinx():

#Plot the first series on the LH y-axis 
ax1 = df.plot('x_column','y1_column') 

#Add the second series plot, and grab the RH axis 
ax2 = df.plot('x_column','y2_column',ax=ax1) 
ax2.set_ylim(0,10) 

Примечание: Только протестирована в панд 19,2

Смежные вопросы