【发布时间】:2020-04-04 03:58:48
【问题描述】:
我有多个相互堆叠的图,并且有一个共同的 x 轴。 x 轴的值从 70 到 6225。当我尝试给出范围 (50,6250) 时,输出是从 50 到 6050,但 50 不是从原点开始的。此外,它也不会以 6250 结束。如何实现这一点。我希望 y 轴刻度在下一个堆栈开始之前从一个绘图的原点运行到它的末尾。
我已附上 MWE 和相同的图像
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
import pylab
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import matplotlib.lines as mlines
from matplotlib.ticker import FormatStrFormatter
def fit_data():
fig = plt.figure(1,figsize=(15,15))
ax1= fig.add_subplot(811,)
ax1.scatter(data1['D'], data1['F'], marker='o', color='red', s=15)
ax1.errorbar(data1['D'], data1['F'], data1['eF'], fmt='.', ecolor='black',color='red', elinewidth=1,capsize=3)
ax2 = fig.add_subplot(812, sharex=ax1 )
ax2.scatter(data2['D'], data2['F'], marker='o', color='blue', s=15)
ax2.errorbar(data2['D'], data2['F'], data2['eF'], fmt='.', ecolor='black',color='blue', elinewidth=1,capsize=3)
ax3 = fig.add_subplot(813, sharex=ax1 )
ax3.scatter(data3['D'], data3['F'], marker='o', color='green', s=15)
ax3.errorbar(data3['D'], data3['F'], data3['eF'], fmt='.', ecolor='black',color='green', elinewidth=1,capsize=3)
ax4 = fig.add_subplot(814, sharex=ax1 )
ax4.scatter(data4['D'], data4['F'], marker='o', color='sienna', s=15)
ax4.errorbar(data4['D'], data4['F'], data4['eF'], fmt='.', ecolor='black',color='sienna', elinewidth=1,capsize=3)
ax5 = fig.add_subplot(815, sharex=ax1 )
ax5.scatter(data5['D'], data5['F'], marker='o', color='brown', s=15)
ax5.errorbar(data5['D'], data5['F'], data5['eF'], fmt='.', ecolor='black',color='brown', elinewidth=1,capsize=3)
ax6 = fig.add_subplot(816, sharex=ax1 )
ax6.scatter(data6['D'], data6['F'], marker='o', color='gold', s=15)
ax6.errorbar(data6['D'], data6['F'], data6['eF'], fmt='.', ecolor='black',color='gold', elinewidth=1,capsize=3)
ax7 = fig.add_subplot(817, sharex=ax1 )
ax7.scatter(data7['D'], data7['F'], marker='o', color='olive', s=15)
ax7.errorbar(data7['D'], data7['F'], data7['eF'], fmt='.', ecolor='black',color='olive', elinewidth=1,capsize=3)
ax8 = fig.add_subplot(818, sharex=ax1 )
ax8.scatter(data8['D'], data8['F'], marker='o', color='greenyellow', s=15)
ax8.errorbar(data8['D'], data8['F'], data8['eF'], fmt='.', ecolor='black',color='greenyellow', elinewidth=1,capsize=3)
fig.subplots_adjust(hspace=0) # remove vertical space between subplots
red_line = mlines.Line2D([], [], color='red', marker='o', markersize=5, label='1350 $\AA$')
ax1.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
red_line = mlines.Line2D([], [], color='blue', marker='o', markersize=5, label='1450 $\AA$')
ax2.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
red_line = mlines.Line2D([], [], color='green', marker='o', markersize=5, label='1710 $\AA$')
ax3.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
red_line = mlines.Line2D([], [], color='sienna', marker='o', markersize=5, label='1800 $\AA$')
ax4.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
red_line = mlines.Line2D([], [], color='brown', marker='o', markersize=5, label='2425 $\AA$')
ax5.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
red_line = mlines.Line2D([], [], color='gold', marker='o', markersize=5, label='2625 $\AA$')
ax6.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
red_line = mlines.Line2D([], [], color='olive', marker='o', markersize=5, label='2875 $\AA$')
ax7.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
red_line = mlines.Line2D([], [], color='orange', marker='o', markersize=5, label='3025 $\AA$')
ax8.legend(bbox_to_anchor=(1, 1), loc=1, borderaxespad=0, handles=[red_line])
for ax in [ax1,ax2,ax3,ax5,ax6,ax7]:
ax.tick_params('x', bottom=False, labelbottom=False)
ax8.xaxis.set_major_formatter(FormatStrFormatter('%g'))
ax8.xaxis.set_ticks(np.arange(50,6250))
plt.savefig("all.jpeg")
plt.savefig("all.pdf")
fig.set_size_inches(w=15,h=15)
plt.show()
plt.close()
fit_data()
【问题讨论】:
-
你想在每个子图上打勾标签还是只在最后一个?
-
所有图的刻度,但标签 (50, 550, 1050 ....) 仅用于最底部的图。还希望绘图以我指定的值开始和结束。
标签: matplotlib jupyter-notebook jupyter