gpt4 book ai didi

numpy - 条宽相等的对数多序列图

转载 作者:行者123 更新时间:2023-12-01 23:42:47 25 4
gpt4 key购买 nike

我有类似的东西

import matplotlib.pyplot as plt
import numpy as np

a=[0.05, 0.1, 0.2, 1, 2, 3]
plt.hist((a*2, a*3), bins=[0, 0.1, 1, 10])
plt.gca().set_xscale("symlog", linthreshx=0.1)
plt.show()

这给了我以下情节: log histogram

可以看出,条形宽度不相等。在线性部分(从 0 到 0.1),一切都找到了,但在此之后,条形宽度仍然是线性刻度,而轴是对数刻度,给我之间的条形和空间不均匀的宽度(刻度是不在条的中间)。

有什么办法可以解决这个问题吗?

最佳答案

灵感来自 https://stackoverflow.com/a/30555229/635387我提出了以下解决方案:

import matplotlib.pyplot as plt
import numpy as np

d=[0.05, 0.1, 0.2, 1, 2, 3]


def LogHistPlot(data, bins):
totalWidth=0.8
colors=("b", "r", "g")
for i, d in enumerate(data):
heights = np.histogram(d, bins)[0]
width=1/len(data)*totalWidth
left=np.array(range(len(heights))) + i*width

plt.bar(left, heights, width, color=colors[i], label=i)
plt.xticks(range(len(bins)), bins)
plt.legend(loc='best')

LogHistPlot((d*2, d*3, d*4), [0, 0.1, 1, 10])

plt.show()

产生这个情节: Correct logarithmic histogram with multiple datasets

基本思想是删除 plt.hist 函数,通过 numpy 计算直方图并使用 plt.bar 绘制它。然后,您可以轻松地使用线性 x 轴,这使得条形宽度计算变得微不足道。最后,刻度被 bin 边缘替换,从而产生对数刻度。而且您甚至不必再处理符号日志线性/对数错误。

关于numpy - 条宽相等的对数多序列图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30551694/

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