在同一画布上绘制对数刻度和线性刻度函数和直方图

时间:2016-10-28 14:00:31

标签: python matplotlib

我有一个概率密度函数,我只能评估对数而不会遇到数字问题。我有一个直方图,我想在同一个画布上绘制。但是,对于直方图,我需要选项log=True以对数刻度绘制,对于函数,我只能直接得到值的对数。如何在同一画布上绘制两个?

请查看此MWE以说明问题:

import matplotlib.pyplot as plt
import random
import math
import numpy as np

sqrt2pi = math.sqrt(2*math.pi)
def gauss(l):
  return [ 1/sqrt2pi * math.exp(-x*x) for x in l]
def loggauss(l):
  return [ -math.log(sqrt2pi) -x*x for x in l ]

# just fill a histogram
h = [ random.gauss(0,1) for x in range(0,1000) ]
plt.hist(h,bins=21,normed=True,log=True)

# this works nicely 
xvals = np.arange(-4,4,0.1)
plt.plot(xvals,gauss(xvals),"-k")
# but I would like to plot this on the same canvas:
# plt.plot(xvals,loggauss(xvals),"-r")

plt.show()

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你想在同一个图中,在同一个x轴上绘制两个数据集,但是一个在log y-scale上,一个在线性y-scale上。您可以使用twinx

执行此操作
[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]

Figure