无法在df.plot()上控制第二个y轴的比例

时间:2015-11-30 19:30:57

标签: python pandas matplotlib plot multiple-axes

我试图使用secondary_y在左侧y轴上绘制3个系列,在右侧绘制1个,但是我不清楚如何定义正确的y轴刻度,就像我在留下ylim=()

我看过这篇文章: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
  • python:3.4.3.final.0
  • python-bits:64
  • 操作系统:Windows
  • OS-release:7
  • pandas:0.16.2
  • numpy:1.9.2
  • scipy:0.15.1
  • matplotlib:1.4.3

What I get for results

我发现这些链接很有用:

tcaswell, working directly with axes

matplotlib.axes documentation

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分: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()

答案 2 :(得分: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)

注意:仅在Pandas 19.2中测试