【问题标题】:Different x values with sharex与 sharex 不同的 x 值
【发布时间】:2017-08-08 20:22:07
【问题描述】:

我有两个时间索引系列,我想绘制它们并共享 x 轴(FEATURE 的范围包含 X 的范围):

import pandas as pd
import matplotlib.pyplot as plt
import datetime

start = pd.Timestamp('2017-01-01 08:00:00')
end = pd.Timestamp('2017-01-01 10:00:00')
X = pd.Series([1, 2, 3],
              [pd.Timestamp('2017-01-01 08:30:00'),
               pd.Timestamp('2017-01-01 09:30:00'),
               pd.Timestamp('2017-01-01 10:30:00')],
              )
FEATURE = pd.Series([0, 4, 2],
                    [pd.Timestamp('2017-01-01 08:00:00'),
                     pd.Timestamp('2017-01-01 09:00:00'),
                     pd.Timestamp('2017-01-01 10:00:00')]
                    )

f, (ax1, ax2) = plt.subplots(2, 1, sharex='all')
X[start:end].plot(ax=ax1)
FEATURE.plot(ax=ax2)
plt.show()

但只显示 FEATURE。如果我把 X 放在最后,那么只会显示 X。

【问题讨论】:

  • X 和 Feature 在 x 轴上的范围似乎不同。因此,在这种情况下,共享轴可能没有太大意义。由于compute_feature在这里是一个秘密,所以没有更多可以告诉的。
  • compute_feature 是指数加权移动平均线,但我认为它没有帮助。这是有道理的:我想在 Feature 的轴上表示 X。
  • 可能,没人知道。如果您提供minimal reproducible example,人们可以对其进行测试。
  • @ImportanceOfBeingErnest 谢谢你,我做到了。
  • 所以这与sharex无关。如果你把它排除在外,仍然会发生奇怪的事情(只有一个轴有刻度)。我不确定究竟是什么原因造成的,但稍后会更深入地研究它。

标签: pandas matplotlib


【解决方案1】:

一种可能的解决方案是使用 matplotlib 绘制数据,而不是使用 pandas 绘图包装器。

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

start = pd.Timestamp('2017-01-01 08:00:00')
end = pd.Timestamp('2017-01-01 10:00:00')
X = pd.Series([1, 2, 3],
              [pd.Timestamp('2017-01-01 08:30:00'),
               pd.Timestamp('2017-01-01 09:30:00'),
               pd.Timestamp('2017-01-01 10:30:00')],
              )
FEATURE = pd.Series([0, 4, 2],
                    [pd.Timestamp('2017-01-01 08:00:00'),
                     pd.Timestamp('2017-01-01 09:00:00'),
                     pd.Timestamp('2017-01-01 10:00:00')]
                    )

f, (ax1, ax2) = plt.subplots(2, 1, sharex='all') 

ax1.plot(X.index, X.values)
ax2.plot(FEATURE.index, FEATURE.values)

loc = mdates.MinuteLocator([0,30])
ax2.xaxis.set_major_locator(loc)
ax2.xaxis.set_major_formatter(mdates.AutoDateFormatter(loc))
plt.show()

【讨论】:

    猜你喜欢
    • 2019-09-02
    • 2019-06-25
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多