gpt4 book ai didi

python - 如何避免 matplotlib 中重叠的误差线?

转载 作者:行者123 更新时间:2023-11-30 21:54:59 25 4
gpt4 key购买 nike

我想为两个不同的数据集创建一个绘图,类似于 answer 中提供的数据集。 :

enter image description here

在上图中,作者通过在新数据集中添加 x 中的一些小的随机散点来解决误差线的重叠问题。

在我的问题中,我必须绘制类似的图形,但在 x 轴上有一些分类数据:

enter image description here

关于如何使用 x 轴上的分类变量稍微移动第二个数据集的误差线,有什么想法吗?我想避免条形图之间的重叠,以使可视化更容易。

最佳答案

您可以通过将默认数据转换添加到数据空间中的先前转换来转换每个误差条。当知道类别通常彼此相距一个数据单元时,这是可能的。

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt
from matplotlib.transforms import Affine2D

x = list("ABCDEF")
y1, y2 = np.random.randn(2, len(x))
yerr1, yerr2 = np.random.rand(2, len(x))*4+0.3

fig, ax = plt.subplots()

trans1 = Affine2D().translate(-0.1, 0.0) + ax.transData
trans2 = Affine2D().translate(+0.1, 0.0) + ax.transData
er1 = ax.errorbar(x, y1, yerr=yerr1, marker="o", linestyle="none", transform=trans1)
er2 = ax.errorbar(x, y2, yerr=yerr2, marker="o", linestyle="none", transform=trans2)

plt.show()

enter image description here

或者,您可以在应用数据转换后平移误差条,从而以点为单位移动它们。

import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt
from matplotlib.transforms import ScaledTranslation

x = list("ABCDEF")
y1, y2 = np.random.randn(2, len(x))
yerr1, yerr2 = np.random.rand(2, len(x))*4+0.3

fig, ax = plt.subplots()

trans1 = ax.transData + ScaledTranslation(-5/72, 0, fig.dpi_scale_trans)
trans2 = ax.transData + ScaledTranslation(+5/72, 0, fig.dpi_scale_trans)
er1 = ax.errorbar(x, y1, yerr=yerr1, marker="o", linestyle="none", transform=trans1)
er2 = ax.errorbar(x, y2, yerr=yerr2, marker="o", linestyle="none", transform=trans2)

plt.show()

enter image description here

虽然两种情况的结果看起来相似,但它们本质上是不同的。当交互式缩放轴或更改图形大小时,您将观察到这种差异。

关于python - 如何避免 matplotlib 中重叠的误差线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58009069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com