3

次の操作を行うと、x 軸の自動再スケーリングが発生するという問題があります。

  1. プロット列 1
  2. 列 2 が null ではない列 1 をプロットしますが、スタイルは異なります。

2 番目のプロットでは、x 軸が再スケーリングされ続け、列 1 のプロット全体の概要が失われます。このノートブックで何が起こったのかを詳しく説明しました: http://nbviewer.ipython.org/5596249

2番目のプロットでx軸が再スケーリングされないようにする方法はありますか? x_compat=True を試してみましたが、何もしていないようです。

バージョン: pd: 0.11.0、MPL: 1.2.0

[編集] ipython の出力は次のとおりです。

In [1]: import pandas as pd

In [2]: pd.__version__
Out[2]: '0.12.0.dev-f354548'

In [3]: dr = pd.date_range('now', periods=10)

In [4]: df = pd.DataFrame(randn(10,2), index=dr)

In [5]: df
Out[5]:
                            0         1
2013-05-17 17:55:43 -0.440814  0.246620
2013-05-18 17:55:43 -0.732045 -0.896267
2013-05-19 17:55:43  1.131248  1.213163
2013-05-20 17:55:43  0.478372  0.624647
2013-05-21 17:55:43  1.425489  0.396689
2013-05-22 17:55:43 -0.881991  0.322917
2013-05-23 17:55:43 -1.047584  0.154040
2013-05-24 17:55:43 -0.327258  0.944843
2013-05-25 17:55:43 -0.013396  1.045499
2013-05-26 17:55:43 -0.035380 -0.611224

In [6]: df[1][:5]=nan

In [7]: df
Out[7]:
                            0         1
2013-05-17 17:55:43 -0.440814       NaN
2013-05-18 17:55:43 -0.732045       NaN
2013-05-19 17:55:43  1.131248       NaN
2013-05-20 17:55:43  0.478372       NaN
2013-05-21 17:55:43  1.425489       NaN
2013-05-22 17:55:43 -0.881991  0.322917
2013-05-23 17:55:43 -1.047584  0.154040
2013-05-24 17:55:43 -0.327258  0.944843
2013-05-25 17:55:43 -0.013396  1.045499
2013-05-26 17:55:43 -0.035380 -0.611224

In [8]: df[0].plot()
Out[8]: <matplotlib.axes.AxesSubplot at 0x116dbff50>

In [9]: df[1].plot()
Out[9]: <matplotlib.axes.AxesSubplot at 0x116dbff50>

In [10]: # the above did not rescale the x-axis, even so the plottable range of [1] is smaller

In [11]: clf()

In [12]: df['selector'] = df[1].notnull()

In [13]: df
Out[13]:
                            0         1 selector
2013-05-17 17:55:43 -0.440814       NaN    False
2013-05-18 17:55:43 -0.732045       NaN    False
2013-05-19 17:55:43  1.131248       NaN    False
2013-05-20 17:55:43  0.478372       NaN    False
2013-05-21 17:55:43  1.425489       NaN    False
2013-05-22 17:55:43 -0.881991  0.322917     True
2013-05-23 17:55:43 -1.047584  0.154040     True
2013-05-24 17:55:43 -0.327258  0.944843     True
2013-05-25 17:55:43 -0.013396  1.045499     True
2013-05-26 17:55:43 -0.035380 -0.611224     True

In [14]: df[0].plot()
Out[14]: <matplotlib.axes.AxesSubplot at 0x111288250>

In [15]: df[df.selector][0].plot(style='r*', markersize=5)
Out[15]: <matplotlib.axes.AxesSubplot at 0x111288250>

In [16]: # the above rescaled the x-axis

コードは次のとおりです。

import pandas as pd

pd.__version__
dr = pd.date_range('now',periods=10)
df = pd.DataFrame(randn(10,2),index=dr)
df[1][:5]=nan

# This way it works:

df[0].plot()

df[1].plot()


df['selector'] = df[1].notnull()
df[0].plot()

# This way the x-axis is being rescaled. How can I fix it at the previous setting?

df[df.selector][0].plot(style='r*')
4

1 に答える 1

0

fig と axes オブジェクトを明示的に作成して、それらをより適切に制御できるようにします。この場合、autoscaleaxes オブジェクトのメソッドを使用します。

import matplotlib.pyplot as plt
import pandas

# [make a dataframe called df]
fig, ax = plt.subplots()

df['A'].plot(ax=ax)
ax.autoscale(enable=False)
df['B'].plot(ax=ax)
于 2013-05-17T16:54:35.027 に答える