Python 中 matplotlib 和 seaborn 之间的情节不一致
inconsistent plot between matplotlib and seaborn in Python
我正在尝试使用 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()
然而,即使绘制了相同的数据,这两个图看起来完全不同。对此作何解释以及如何将误差线添加到点图中?
似乎 sns.pointplot
只是使用 [0...n-1]
的数组作为 x 值,然后使用您提供的 x 值来标记 x 轴上的刻度。您可以通过查看输出 [-0.5, 4.5]
的 ax.get_xlim()
来检查。
因此,当您向 plt.plot
提供实际的 x 值时,它们似乎处于错误的位置。
我不会说这是一个错误,因为 seaborn 认为 pointplot
的输入是分类的(这里是 documentation 了解更多信息)
您可以通过模仿 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()
我正在尝试使用 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()
然而,即使绘制了相同的数据,这两个图看起来完全不同。对此作何解释以及如何将误差线添加到点图中?
似乎 sns.pointplot
只是使用 [0...n-1]
的数组作为 x 值,然后使用您提供的 x 值来标记 x 轴上的刻度。您可以通过查看输出 [-0.5, 4.5]
的 ax.get_xlim()
来检查。
因此,当您向 plt.plot
提供实际的 x 值时,它们似乎处于错误的位置。
我不会说这是一个错误,因为 seaborn 认为 pointplot
的输入是分类的(这里是 documentation 了解更多信息)
您可以通过模仿 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()