【问题标题】:x and y axis ticks shifted from originx 和 y 轴刻度从原点偏移
【发布时间】: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


【解决方案1】:

要设置子图的限制,您可以这样做

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]])

【讨论】:

  • 我试过这个 ax8.set_xticks(np.arange(50, 6250, 500) 但结果还是一样。
  • 绘图的 x 轴是否可以像我们在图表中那样从 50 开始到 6250 结束?
  • @BRMBU 有错别字,应该是ax8.set_xticks(np.arange(50, 6250, 500))
  • @BRMBU 查看编辑后的答案,了解如何在 xticks 中包含端点
猜你喜欢
  • 2020-12-15
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多