Python中matplotlib和seaborn绘图不一致

1 投票
1 回答
619 浏览
提问于 2025-05-10 23:26

我正在尝试在seaborn的pointplot中使用plt.errorbar添加误差条:

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()

但是这两个图看起来完全不同,尽管绘制的是相同的数据。这是为什么呢?我该如何在pointplot中添加误差条呢?

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

3

看起来 sns.pointplot 只是把一个从 [0...n-1] 的数组当作 x 轴的值,然后用你提供的 x 值来标记 x 轴上的刻度。你可以通过查看 ax.get_xlim() 来确认这一点,它会输出 [-0.5, 4.5]

因此,当你把实际的 x 值传给 plt.plot 时,它们似乎就放错位置了。

我不认为这算是个 bug,因为 seaborn 把传给 pointplot 的输入视为分类数据(更多信息可以查看 文档)。

你可以通过模仿 seaborn 的行为来解决这个简单的例子:

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()

在这里输入图片描述

撰写回答