matplotlib - x 和 y 轴刻度从原点偏移
问题描述
我有多个相互堆叠的图,并且有一个共同的 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()
解决方案
要设置子图的限制,您可以这样做
for ax in [ax1, ax2, ax3, ax5, ax6, ax7, ax8]:
ax.set_xlim([50, 6250])
并将刻度设置为所需的序列(50、550、1050,...)可以通过
ax8.set_xticks(np.arange(50, 6250, 500))
或者包括你可以使用的终点
np.hstack([np.arange(50, 6250, 500), [6250]])
推荐阅读
- python - ModuleNotFoundError: No module named - 尝试从另一个文件夹导入文件时
- java - java.time.Duration 的 springdoc-openapi-webflux-ui 问题(ISO 8601 持续时间格式)
- angular - 在 Angular-msal2 中使用 Azure idtoken 请求 API 时出现 Cors 错误
- php - 如何使用模态更新数据表中的数据?
- python - 我想单独过滤每个代理的客户。姜戈
- azure - 如何在 Azure Web App 的部署窗口期间让用户查看计划的维护消息
- r - R循环没有给出错误但也没有输出,代码可能有什么问题?
- ms-word - Word 加载项:自定义 XML 删除无法正常工作
- python - 如何从 pygame-menu 中的 text_input 获取值?
- java - Android 的 Ljava/time/ZoneId 崩溃