Python 具有平均值和变异系数的漂亮条形图

Python 具有平均值和变异系数的漂亮条形图,python,matplotlib,Python,Matplotlib,我画了一些值,它们有平均值和平均值的变异系数。问题是,我不知道如何把这两个值都放在情节上,让它看起来有点美。我的方法是这样的: import matplotlib.pyplot as plt import numpy as np colors = ["b", "g", "r", "c", "m", "y", "k", "w"] models = ["DQN", "DDQN", "DoubleDQN", "DoubleDDQN", "RND", "DQNfD"] means = [1.90, 0.

我画了一些值,它们有平均值和平均值的变异系数。问题是,我不知道如何把这两个值都放在情节上,让它看起来有点美。我的方法是这样的:

import matplotlib.pyplot as plt
import numpy as np
colors = ["b", "g", "r", "c", "m", "y", "k", "w"]
models = ["DQN", "DDQN", "DoubleDQN", "DoubleDDQN", "RND", "DQNfD"]
means = [1.90, 0.67, 1.32, 2.02, 0.90, 1.92]
cvs =   [1.34, 2.32, 1.44, 1.32, 2.03, 1.33]
cont = 0
for m, c, mean, cv in zip(models, colors, means, cvs):
    plt.bar(cont, mean, label = "CV = {:.2f}".format(cv), color = c)
    plt.text(cont-0.16, mean + 0.03, "{:.2f}".format(mean))
    plt.title("Mean Episode Reward at Test")
    plt.ylabel('Mean Episode Reward')
    plt.xticks(np.arange(len(models)), models)
    cont+=1
plt.legend()
plt.tight_layout()
输出是这样的:
我想以图形和数字的方式查看均值和cv的值,但如果cv不可能,我想不出怎么做。cv的错误条并不是最好的选择,因为我们的比例不同,但在图例中使用它们太难看了。

我不得不承认,我不确定想要的结果到底是什么;因此,这里有一个简单的美化建议:

import matplotlib.pyplot as plt

colors = ["b", "g", "r", "c", "m", "y", "k", "w"]
models = ["DQN", "DDQN", "DoubleDQN", "DoubleDDQN", "RND", "DQNfD"]
means = [1.90, 0.67, 1.32, 2.02, 0.90, 1.92]
cvs =   [1.34, 2.32, 1.44, 1.32, 2.03, 1.33]


plt.bar(models, means, color=colors[:len(means)])

for i, (mean, cv) in enumerate(zip(means, cvs)):
    annotkw = dict(textcoords="offset points", ha="center")
    plt.annotate("CV = {:.2f}".format(cv), xy=(i, mean), xytext=(0, -3),
                 va = "top", fontsize=8, fontweight="bold",
                 color="w", **annotkw)
    plt.annotate("{:.2f}".format(mean), xy=(i, mean), xytext=(0, 1),
                 va = "bottom", **annotkw)

plt.title("Mean Episode Reward at Test")
plt.ylabel('Mean Episode Reward')

plt.margins(y=0.1)
plt.tight_layout()
plt.show()

我不知道这是否是最好的方法,但肯定比我的好。我认为CV的可视化效果会更好。谢谢。