【问题标题】:secondary_y=True changes x axis in pandassecondary_y=True 改变 pandas 中的 x 轴
【发布时间】:2015-06-23 12:27:12
【问题描述】:

我正在尝试在 Pandas 中从不同的数据帧中绘制两个系列。

它们的轴都是日期时间对象,因此可以将它们绘制在一起:

amazon_prices.Close.plot()
data[amazon].BULL_MINUS_BEAR.resample("W").plot()
plt.plot()

产量:

一切都好,但我需要绿色图表有自己的比例。所以我用了

amazon_prices.Close.plot()
data[amazon].BULL_MINUS_BEAR.resample("W").plot(secondary_y=True)
plt.plot()

这个secondary_y会产生一个问题,因为我没有想要的图表,而是有以下内容:

非常感谢您对此提供的任何帮助。

(不太相关的注释:我(显然)在使用 Pandas、Matplotlib,所有这些都在 Ipython 笔记本中)

编辑: 我已经注意到删除 resample("W") 解决了这个问题。然而,这仍然是一个问题,因为非重采样数据太嘈杂而无法看到。能够使用辅助轴绘制采样数据将非常有帮助。

【问题讨论】:

标签: python pandas matplotlib plot ipython-notebook


【解决方案1】:

我有同样的问题,当我想要一个secondary_y时总是得到一个奇怪的情节。

我不知道为什么没有人在这篇文章中提到这种方法,但这是我如何使用它的方法,使用与 cphlewis 相同的示例:

import matplotlib.pyplot as plt
import pandas as pd
from numpy.random import random

df = pd.DataFrame(random((15,2)),columns=['a','b'])
ax = df.plot(secondary_y=['b'])
plt.show()

Here's what it'll look like

【讨论】:

    【解决方案2】:
    import matplotlib.pyplot as plt
    import pandas as pd
    from numpy.random import random
    
    df = pd.DataFrame(random((15,2)),columns=['a','b'])
    df.a = df.a*100
    
    fig, ax1 = plt.subplots(1,1)
    df.a.plot(ax=ax1, color='blue', label='a')
    ax2 = ax1.twinx()
    df.b.plot(ax=ax2, color='green', label='b')
    ax1.set_ylabel('a')
    ax2.set_ylabel('b')
    ax1.legend(loc=3)
    ax2.legend(loc=0)
    plt.show()
    

    【讨论】:

    • 感谢您的回答,这无疑可以解决问题。我也有兴趣了解为什么我的解决方案不起作用。对此有什么想法吗?
    • 看不到您的数据就无法判断!如何发布各种数据帧的head(包括 resample('W') 的结果等)。另外,this 版本是否适用于 您的真实重采样数据? (只是检查)
    • ...另外,一般来说,调用plot 并希望所有当前活动的默认值都正确排列的未指定交互风格对我来说似乎很脆弱。我只是从一开始就做明确的无花果和斧头,现在。
    • 请注意,secondary_y=True 的文档记录很差。所以很难弄清楚它到底做了什么。它也可能在未来发生变化。我会坚持使用旧的twinx(),就像在这个答案中所做的那样。
    猜你喜欢
    • 2019-01-30
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2014-04-22
    • 2020-05-08
    • 1970-01-01
    相关资源
    最近更新 更多