python - 带有均值和变异系数的漂亮条形图
问题描述
我正在绘制一些具有平均值和该平均值的变异系数的值。问题是我不知道如何将这两种价值观都放在情节上并认为它有点美。我的方法是这样的:
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()
输出是这样的: 我想以图形和数字方式查看均值和 cvs 的值,但我不知道该怎么做(如果 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()
推荐阅读
- bash - 如何修复命令后卡住的问题,“bash flash.sh”
- arrays - 数组数组的简单计算
- java - 检测和替换不成对的降价符号,而不是改变成对的符号
- c# - 如何在 uwp 打印中断开打印事件处理程序?
- r - nhanes 2003 -2004 年数据的描述性统计
- angular - 我正在尝试使用角度上传图像但出现错误
- c++ - 为什么 == 运算符产生的结果与 strcmp 不同?
- package - Elm 安装包位置
- javascript - Javascript Canvas 问题:为什么我在画布上的点与图表的高度不对应?
- node.js - 将密码存储在 Node.js 文件中是否安全?