如何绘制相互堆叠的多个图

时间:2019-07-20 12:43:28

标签: matplotlib plot jupyter-notebook

我需要绘制一组9个或更多具有相同x轴的数据集。我能够为其中2个人做到这一点,但其他人却没有出现。它们必须彼此堆叠。具有共同的x轴。我附上了到目前为止我能做的事情的图像。

stack of plot

我使用了以下代码

import numpy as np
import pandas as pd
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import matplotlib.gridspec as gridspec
from matplotlib.lines import Line2D
import matplotlib.lines as mlines

file1 = '1.dat'
file2 = '10.dat'

data1 = pd.read_csv(file1, delimiter='\s+', header=None, engine='python')
data1.columns = ['M','B','C']

data2 = pd.read_csv(file2, delimiter='\s+', header=None, engine='python')
data2.columns = ['N','A','D']

def fit_data():
    fig = plt.figure(1,figsize=(12,11))
    ax1= fig.add_subplot(211,)
    ax1.plot(data1['M'], data1['B'],   color='cornflowerblue', linestyle= '-', lw=0.5)
    ax1.scatter(data1['M'], data1['B'],  marker='o', color='red', s=25)
    ax1.errorbar(data1['M'], data1['B'], data1['C'], fmt='.', ecolor='red',color='red', elinewidth=1,capsize=3)

    ax2 = fig.add_subplot(211, sharex=ax1 )
    ax2.plot(data2['N'], data2['A'],   color='cornflowerblue', linestyle= '-', lw=0.5)
    ax2.scatter(data2['N'], data2['A'],  marker='o', color='blue', s=25)
    ax2.errorbar(data2['N'], data2['A'], data2['D'], fmt='.', ecolor='blue',color='blue', elinewidth=1,capsize=3)

    plt.setp(ax1.get_xticklabels(), visible=False) # hide labels
    fig.subplots_adjust(hspace=0) 


    ax1.tick_params(axis='both',which='minor',length=5,width=2,labelsize=18)
    ax1.tick_params(axis='both',which='major',length=8,width=2,labelsize=18)

    plt.savefig("1.pdf")
    #fig.set_size_inches(w=13,h=10)
    plt.show()
    plt.close()


fit_data()

我阅读了所有的图,但是在这里无法应用同样的方法。

我对此进行了修改,但这就是我得到的。 modified code。 我需要进行叠加以进行比较研究。像这张图片。 comparative study

这是我修改和使用的代码的一部分。

plt.setp(ax1.get_xticklabels(), visible=False) # hide labels
    fig.subplots_adjust(hspace=0.0) # remove vertical space between subplots

是否应该分别对ax1,ax2等进行处理?

1 个答案:

答案 0 :(得分:0)

plt.subplots_adjust(hspace=0.0)删除它们之间的空间。 您可以根据需要拥有任意数量的地块:

from matplotlib import pyplot as plt
import numpy as np

numer_of_plots = 9
X = np.random.random((numer_of_plots, 50))

fig, axs = plt.subplots(nrows=numer_of_plots, ncols=1)
for ax, x in zip(axs, X):
    ax.plot(range(50), x)

plt.subplots_adjust(hspace=0.0)
plt.show()