import matplotlib.pyplot as plt import pandas as pd import matplotlib.ticker as ticker df1 = pd.read_csv("data.tsv", index_col=0 , sep = "\t").T.div(1000) df2 = pd.read_csv("consult.tsv", index_col=0 , sep = "\t") df2 = df2.reindex(columns=['Total']) fig, ax = plt.subplots(figsize=(10, 5)) ax2 = ax.twinx() ax.plot(df2, label="Doctor consult", color="#5E95CD") for i in range( len(df1) ): ax2.bar(df1.columns, df1.iloc[i] , bottom=df1.iloc[:i].sum(), label=df1.index[i]) lines, labels = ax.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels() ax2.legend(lines + lines2, labels + labels2, facecolor="#eeeeee" ,ncol=2, fontsize=11,loc='upper left') ax.set_ylim([0,20]) ax2.set_ylim([0,1600]) ax2.axvspan(14.5, 20.5, color="#dddddd",zorder=-1) #BG paint ax.patch.set_alpha(0) ax.set_zorder(2) ax2.set_zorder(1) plt.rcParams['font.family'] = 'sans-serif' plt.rcParams['font.sans-serif'] = ['Noto Sans Display'] plt.subplots_adjust(left=0.07, bottom=0.13, right=0.90, top=0.92) plt.title("Healthcare expenditure of Japan by Age (MHLW,2020)", fontsize=16) plt.tick_params(labelsize=10, pad=4) ax.set_xlabel("Age", size=10) ax.set_ylabel("Doctor consult per person (count)", size=10) ax2.set_ylabel("Healthcare expenditure per person (1000 JPY)", size=10) plt.setp(ax.get_xticklabels(), fontsize=8, rotation=45) plt.setp(ax.get_yticklabels(), fontsize=9 ) ax2.minorticks_on() ax.set_axisbelow(True) ax2.set_axisbelow(True) ax.grid(False, which='both', axis="both") ax2.grid(True, which='major',color='#cccccc',linestyle='-', axis="y") ax2.grid(True, which='minor',color='#eeeeee',linestyle='--', axis="y") plt.savefig("image.svg")