【问题标题】:Why my Seaborn line plot x-axis shifts one unit?为什么我的 Seaborn 线图 x 轴移动一个单位?
【发布时间】:2020-05-24 23:18:37
【问题描述】:

我正在尝试将两个简单且汇总的 pandas 数据框与 Seaborn 库中的线图进行比较,但其中一条线在 X 轴上移动了一个单位。它出什么问题了? 数据框是:

这是我的代码:

df = pd.read_csv('/home/gazelle/Documents/m3inference/m3_result.csv',index_col='id')
df = df.drop("Unnamed: 0",axis=1)
for i, v in df.iterrows():
    if str(i) not in result:
        df.drop(i, inplace=True)
    else:
        df.loc[i, 'estimated'] = result[str(i)]

m3 = pd.read_csv('plot_result.csv').set_index('id')
ids = list(m3.index.values)
m3 = m3['age'].value_counts().to_frame().reset_index().sort_values('index')
m3 = m3.rename(columns={m3.columns[0]:'bucket', m3.columns[1]:'age'})

df_estimated = df[df.index.isin(ids)]['estimated'].value_counts().to_frame().reset_index().sort_values('index')
df_estimated = df_estimated.rename(columns={df_estimated.columns[0]:'bucket', df_estimated.columns[1]:'age'})

sns.lineplot(x='bucket', y='age', data=m3)
sns.lineplot(x='bucket', y='age', data=df_estimated)

结果是:

【问题讨论】:

  • 你能分享剩下的代码吗?只是一种预感,但我感觉index 列的[0]th 值是2,因此图表看起来向右移动了一个单位。我对我的假设很有信心,所以如果是这样的话,我可以分享一个答案。
  • 假设数据帧是您显示的数据帧,代码会生成正确的图像。也就是说,代码没问题,问题可能出在数据上。
  • @warped 我从我的数据框中截取了屏幕截图。
  • @Jarmos 我提出了所有要求。
  • 我从数据框中复制了数据,并用您的代码绘制了它们,并得到了正确的图。所以,问题不在于您发布的代码。

标签: python pandas dataframe seaborn


【解决方案1】:

正如 cmets 中所指出的,您提供的数据和代码似乎会产生正确的结果:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
sns.set()

m3 = pd.DataFrame({"index": [2, 3, 4, 1], "age": [123, 116, 66, 33]})
df_estimated = pd.DataFrame({"index": [3, 2, 4, 1], "estimated": [200, 100, 37, 1]})

sns.lineplot(x="index", y="age", data=m3)
sns.lineplot(x="index", y="estimated", data=df_estimated)
plt.show()

这给出了一个与您在上面发布的不同的情节:

从您的屏幕截图看来,您正在使用 Jupyter 笔记本。您可能遇到的问题是,在您绘制时,数据框 m3 不再具有您在上面打印的值,而是已被修改。

【讨论】:

  • 那为什么我的情节是这样的呢?我也用 Matplotlib 对其进行了测试,但结果是一样的。这太奇怪了。
  • 您的问题极不可能是由于绘图库造成的,因为这是一个数据点很少的标准绘图。你能重现我的结果吗(在一个干净的新 Python 文件或 Jupyter 笔记本中)?
  • 我认为问题不在于数据框修改或类似的事情。我编辑了我的问题并添加了一些额外的代码。你可以看到。
  • 正如许多人现在已经证明的那样,这些值并不是输入到sns.lineplot 的值。此外,您将 bucket 而不是 index 绘制为 x 轴,因此显然不能是您在脚本中使用的数据框。
  • 请提供完整的minimal reproducible example,其他人可以复制并在他们的机器上运行。
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2023-04-10
  • 2020-09-03
  • 2020-06-15
  • 2021-11-18
相关资源
最近更新 更多