【问题标题】:x-axis inverted unexpectedly by pandas.plot(...)x 轴被 pandas.plot(...) 意外反转
【发布时间】:2015-04-28 01:44:09
【问题描述】:

在使用 pandas 绘制一系列数据与另一系列数据时,X 轴意外地自动反转。请看我下面的代码。如何确保 x 轴始终指向右侧? x 轴的这种自动反转是熊猫的预期行为吗?可以禁用吗?

让我在下面解释我的示例。创建了三个图。我希望每一个都显示出向右上升近 45 度的线。然而,其中一些有 45 度线向右下降,因为它的 x 轴是自动反转的。似乎 x 轴是否反转取决于要绘制的值。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df2 = pd.DataFrame(np.random.randn(10, 3), columns=["a", "b", "c"])
df3 = df2*1.1

df3.rename(columns={"a": "a*1.1", "b": "b*1.1", "c": "c*1.1"}, inplace=True)
df23 = df2.join(df3)

fig, ax_list = plt.subplots(1,3)

ax=ax_list[0]
df23[["a", "a*1.1"]].plot(ax=ax, x="a")
ax.axis('equal')
ax.set_title("(x,y)=(a,a*1.1)")
print ax.get_xlim()  ## Added for clarity

ax=ax_list[1]
df23[["b", "b*1.1"]].plot(ax=ax, x="b")
ax.axis('equal')
ax.set_title("(x,y)=(b,b*1.1)")
print ax.get_xlim()  ## Added for clarity  

ax=ax_list[2]
df23[["c", "c*1.1"]].plot(ax=ax, x="c")
ax.axis('equal')
ax.set_title("(x,y)=(c,c*1.1)")
print ax.get_xlim()  ## Added for clarity

【问题讨论】:

  • 我遇到了类似的问题。尝试对你的地块进行排序。例如df23[["a", "a*1.1"]].sort("a").plot(ax=ax, x="a")
  • 感谢您的评论。我尝试排序。但是,如果它是一个多值函数,排序会改变曲线的形状。所以我想知道一种禁用x轴反转的方法。
  • 你试过在 x 轴上使用set_xticklabels 吗?
  • 这与标签无关。为了澄清这一点,我在示例代码中添加了ax.get_xlim()。您应该看到 x 轴范围的左侧值大于右侧值。
  • 这里有一个类似的问题 - stackoverflow.com/questions/14770218/…

标签: python pandas matplotlib


【解决方案1】:

您可以为每个情节强制执行一个方向:

(t,b)= ax.get_xlim()  ## Added for clarity
if t > b:
    ax.set_xlim((b,t))

或

if ax.xaxis_inverted():
    ax.invert_xaxis()

(不过,后者只是做显式的三行版本。)

【讨论】:

  • 我不知道为什么我没有想到这个简单的代码。谢谢你。这解决了问题。然而,我仍然想知道为什么熊猫首先要反转 x 轴?如何禁用反转?
  • 我不知道!当我将它作为测试用例运行时,只有最左边的情节反转了,这似乎更奇怪。
【解决方案2】:

我在issue tracker of pandas上问了这个问题,得到了答案。

daraframe.plot(..) 是这样设计的

  • 点的x坐标是根据x参数指定的列的索引(即行号)确定的。
  • 点的y坐标是y参数指定的列的值。

对于散点图,我觉得上面的设计不太合适。我能想到的唯一解决方案是使用 plt.plot 直接。

cphlewis's workaround 也很有用。

【讨论】:

    猜你喜欢
    • 2019-01-21
    • 2021-12-02
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多