【问题标题】:inconsistent plot between matplotlib and seaborn in PythonPython中matplotlib和seaborn之间的情节不一致
【发布时间】:2015-11-24 18:41:01
【问题描述】:

我正在尝试使用 plt.errorbar 将错误栏添加到 seaborn 中的 pointplot

import matplotlib
import matplotlib.pylab as plt
import seaborn as sns
import pandas
sns.set_style("white")

data = pandas.DataFrame({"x": [0.158, 0.209, 0.31, 0.4, 0.519],
                        "y": [0.13, 0.109, 0.129, 0.250, 1.10],
                        "s": [0.01]*5})

plt.figure()
sns.pointplot(x="x", y="y", data=data)
plt.errorbar(data["x"], data["y"], yerr=data["s"])
plt.show()

然而,即使绘制相同的数据,这两个图看起来也完全不同。什么解释了这一点以及如何将误差线添加到点图中?

【问题讨论】:

  • 你确定seaborn 应该这样工作吗?似乎matplotlibseaborn 正在争夺一个输出窗口,并且可能会弄乱彼此的设置。如果您分别绘制图表,它们似乎是正确的。
  • 你能添加一张显示差异的图片吗?

标签: python matplotlib seaborn


【解决方案1】:

似乎sns.pointplot 只是使用[0...n-1] 的数组作为x 值,然后使用您提供的x 值来标记x 轴上的刻度。您可以通过查看输出[-0.5, 4.5]ax.get_xlim() 来检查。 因此,当您向plt.plot 提供实际的 x 值时,它们似乎处于错误的位置。

我不会说这是一个错误,因为 seaborn 认为 pointplot 的输入是分类的(这里是 documentation 了解更多信息)

您可以通过模仿seaborns 的行为为您的简单示例解决此问题:

import matplotlib
import matplotlib.pylab as plt
import seaborn as sns
import pandas
import numpy as np
sns.set_style("white")

data = pandas.DataFrame({"x": [0.158, 0.209, 0.31, 0.4, 0.519],
                        "y": [0.13, 0.109, 0.129, 0.250, 1.10],
                        "s": [0.05]*5})

plt.figure()
sns.pointplot(x="x", y="y", data=data)
plt.errorbar(np.arange(5), data["y"], yerr=data["s"], color='r')
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 2021-07-15
    • 2019-01-14
    相关资源
    最近更新 更多