Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib-使用重叠的x/y记号在同一轴上绘制两个直方图_Python_Matplotlib_Histogram - Fatal编程技术网

Python matplotlib-使用重叠的x/y记号在同一轴上绘制两个直方图

Python matplotlib-使用重叠的x/y记号在同一轴上绘制两个直方图,python,matplotlib,histogram,Python,Matplotlib,Histogram,我试图在我的绘图的多个轴上绘制直方图。下面的脚本就是这样做的,但我无法标准化每个ax的x/y刻度,也就是说,没有重叠,每个ax都有一个共同的间隔范围 我想为每个ax指定x/y刻度,而不是为整个绘图设置全局刻度 到目前为止,我得到的结果也如下。正如您所看到的,滴答声被弄乱了,特别是在最后的ax中。我试过ax\u set\u x/yticks,plt.x/yticks。。。。但我很确定我做错了什么。谢谢!! 剧本: import numpy as np import matplotlib.pypl

我试图在我的绘图的多个轴上绘制直方图。下面的脚本就是这样做的,但我无法标准化每个
ax
的x/y刻度,也就是说,没有重叠,每个ax都有一个共同的间隔范围

我想为每个
ax
指定x/y刻度,而不是为整个绘图设置全局刻度

到目前为止,我得到的结果也如下。正如您所看到的,滴答声被弄乱了,特别是在最后的
ax
中。我试过ax\u set\u x/yticks,plt.x/yticks。。。。但我很确定我做错了什么。谢谢!!

剧本:

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as ss

data = np.random.normal(0.0005, 0.001,1000)
data2 = np.random.normal(0.0004, 0.001,1000)-data
diff = {k:[data, data2] for k in range(3)}
for k in diff:
    print k
ttls= ['SC2 vs SC1', 'SC4 vs SC3','SC6 vs SC5']
colors = ['chocolate', 'green']
leg = ['var1', 'var2'] 
bins = 100
fig, axes = plt.subplots(nrows=3, ncols=1, figsize=(8.27, 11.69))
fig.add_subplot(111, frameon=False)
fig.suptitle('Normed Histograms', color='#6E6E6E', fontsize=10, fontweight='bold')
for ax, ttl, arr in zip(axes, ttls, diff.itervalues()):
    ax.hist((arr[0], arr[1]),bins, histtype='stepfilled', density=True, color=colors, label=leg, alpha=0.70)
    for i, v in enumerate(arr):
        mean = np.mean(v) 
        std = np.std(v)    
        xRange = np.linspace(np.min(v), np.max(v))#, len(cs))
        nd = ss.norm.pdf(xRange, mean, std)
        if  i == 0:
            socNd = ax.plot(xRange, nd, color='r', alpha=0.70, linewidth=0.8, label="fitted PDF*")
            socLine = ax.axvline(mean, color=colors[0], linestyle = ':',linewidth=2, label="Mean value")
        if i == 1:
            bcNd = ax.plot(xRange, nd, color='r', alpha=0.70, linewidth=0.8)
            bcLine = ax.axvline(mean, color=colors[1], linestyle = ':',linewidth=2)                 
    ax.set_title(ttl, loc='left', color='#6E6E6E', fontsize=8.5, fontweight='bold', pad=12)
    ax.set_ylabel("Frequency",  color='#6E6E6E', fontsize=8) 
    axes[2].legend(loc='lower center', bbox_to_anchor=(0.5, -0.5),ncol=4)
    axes[2].set_xlabel("xlabel", fontsize=8, labelpad=3)
plt.subplots_adjust(hspace=0.7)

plt.show()

您正在使用
fig,axes=plt创建3个子地块。子地块(…)
然后在现有3个子地块的基础上创建另一个子地块。但是,由于您设置了
frameon=False
,因此仅显示勾号和勾号标签(尝试删除
frameon=False
,您将看到问题)

解决方案是简单地删除
fig.add_子图(111,frameon=False)
,这样就不会创建额外的轴集

对我来说,生成的图形如下所示:


删除
fig.add_子图(111,frameon=False)
Wow,真不敢相信是这样的。谢谢!