为什么我的绘图中的错误限制不显示在matplotlib中?

2024-04-20 04:07:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我穿过了this example of matplotlib,他们的图有上限和下限,还有一条垂直线,当它们结束时显示出来

enter image description here

但当我在Python3.7 vscode中使用完全相同的代码时,我得到如下结果:

enter image description here

为什么?我希望x和y极限上额外的腱前线始终显示。我该怎么做

教程中的代码:

"""
Demo of the errorbar function, including upper and lower limits
"""
import numpy as np
import matplotlib.pyplot as plt

# example data
x = np.arange(0.5, 5.5, 0.5)
y = np.exp(-x)
xerr = 0.1
yerr = 0.2
ls = 'dotted'

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

# standard error bars
plt.errorbar(x, y, xerr=xerr, yerr=yerr, ls=ls, color='blue')

# including upper limits
uplims = np.zeros(x.shape)
uplims[[1, 5, 9]] = True
plt.errorbar(x, y + 0.5, xerr=xerr, yerr=yerr, uplims=uplims, ls=ls,
             color='green')

# including lower limits
lolims = np.zeros(x.shape)
lolims[[2, 4, 8]] = True
plt.errorbar(x, y + 1.0, xerr=xerr, yerr=yerr, lolims=lolims, ls=ls,
             color='red')

# including upper and lower limits
plt.errorbar(x, y + 1.5, marker='o', ms=8, xerr=xerr, yerr=yerr,
             lolims=lolims, uplims=uplims, ls=ls, color='magenta')

# including xlower and xupper limits
xerr = 0.2
yerr = np.zeros(x.shape) + 0.2
yerr[[3, 6]] = 0.3
xlolims = lolims
xuplims = uplims
lolims = np.zeros(x.shape)
uplims = np.zeros(x.shape)
lolims[[6]] = True
uplims[[3]] = True
plt.errorbar(x, y + 2.1, marker='o', ms=8, xerr=xerr, yerr=yerr,
             xlolims=xlolims, xuplims=xuplims, uplims=uplims, lolims=lolims,
             ls='none', mec='blue', capsize=0, color='cyan')

ax.set_xlim((0, 5.5))
ax.set_title('Errorbar upper and lower limits')
plt.show()

编辑:

现在,只有手动指定倾覆而不是全局倾覆,它才能工作…为什么

            fig, (loss_ax1, acc_ax2) = plt.subplots(nrows=2, ncols=1, sharex=True)

            loss_ax1.plot(episodes_train_x, train_loss_y, label='Train Loss', linestyle='-', marker='o', color='r', linewidth=1)
            loss_ax1.errorbar(episodes_eval_x, eval_loss_y, yerr=eval_loss_std, label=f'{eval_label} Loss', linestyle='-', marker='o', color='m', linewidth=1, capsize=3)
            loss_ax1.legend()
            loss_ax1.set_title('Meta-Learnig & Evaluation Curves')
            loss_ax1.set_ylabel('Meta-Loss')
            loss_ax1.grid(grid)

            acc_ax2.plot(episodes_train_x, train_acc_y, label='Accuracy', linestyle='-', marker='o', color='b', linewidth=1)
            acc_ax2.errorbar(episodes_eval_x, eval_acc_y, yerr=eval_acc_std, label=f'{eval_label} Accuracy', linestyle='-', marker='o', color='c', linewidth=1, capsize=3)
            acc_ax2.legend()
            acc_ax2.set_xlabel('Episodes (Outer Epochs)')
            acc_ax2.set_ylabel('Meta-Accuracy')
            acc_ax2.grid(grid)

            plt.tight_layout()

            #plt.show() if show else None

Tags: evalnppltlscoloracclosslimits
1条回答
网友
1楼 · 发布于 2024-04-20 04:07:15

使用capsize参数设置封口的长度,例如

plt.errorbar(x, y, xerr=xerr, yerr=yerr, ls=ls, color='blue', capsize=3)

或为所有绘图设置一次选项:

import matplotlib as mpl
mpl.rcParams["errorbar.capsize"] = 3

示例代码:

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

mpl.rcParams["errorbar.capsize"] = 3

# example data
x = np.arange(0.5, 5.5, 0.5)
y = np.exp(-x)
xerr = 0.1
yerr = 0.2
ls = 'dotted'

fig, ax = plt.subplots(2, 1, figsize=(6, 6))

# standard error bars
ax[0].errorbar(x, y, xerr=xerr, yerr=yerr, ls=ls, color='blue')

# including upper limits
uplims = np.zeros(x.shape)
uplims[[1, 5, 9]] = True
ax[1].errorbar(x, y + 0.5, xerr=xerr, yerr=yerr, uplims=uplims, ls=ls,
             color='green')

enter image description here

相关问题 更多 >