Python 控制所有子批次上的X轴刻度标记大小

Python 控制所有子批次上的X轴刻度标记大小,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有下面的代码,它在一定程度上起作用。但是,它只更改其中一个子批次的XTICK的大小。我如何更改它们的大小 import pandas as pd import matplotlib.pyplot as plt import numpy as np input_file = 'CSP.csv' output_file = 'sub_plots.png' df = pd.read_csv(input_file, header = 0) classes = ['SD','SC','FIR','MD

我有下面的代码,它在一定程度上起作用。但是,它只更改其中一个子批次的XTICK的大小。我如何更改它们的大小

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

input_file = 'CSP.csv'
output_file = 'sub_plots.png'
df = pd.read_csv(input_file, header = 0)
classes = ['SD','SC','FIR','MD','UA','LB']

f, axarr = plt.subplots(2, 3)
f.tight_layout()

i=0
for r in range(2):
    for c in range(3):
        axarr[r][c].hist(df.CSP_change[(df.Class==classes[i])].values,10,rwidth=1, alpha=0.3)
        axarr[r][c].set_title(classes[i])
        axarr[r][c].spines['top'].set_visible(False)
        axarr[r][c].spines['right'].set_visible(False)
        axarr[r][c].spines['bottom'].set_visible(True)
        axarr[r][c].spines['left'].set_visible(True)
        axarr[r][c].get_xaxis().tick_bottom()
        axarr[r][c].get_yaxis().tick_left()
        plt.xticks(fontsize=6)
        i += 1

#save
plt.savefig(output_file)


我尝试将plt更改为axarr[r][c],但它给了我一条关于没有属性xticks的错误消息。

我认为最简单的解决方案是:

import matplotlib as mpl

# some code here

f, axarr = plt.subplots(2, 3)
f.tight_layout()

label_size = 6
mpl.rcParams['xtick.labelsize'] = label_size #add these lines in 

# the rest of your code

plt.xticks
仅作用于创建的最终子批次轴。您想在所有子地块上设置它。您有两个选择:

1) 可以使用轴的特性设置每个轴的刻度标签大小。使用此行,而不是您当前拥有的
plt.xticks
行:

axarr[r][c].tick_params(axis='x',labelsize=6)
2) 您可以使用(如@DavidG所建议的)为所有子批次全局设置它。在创建地物和轴之前放置此线:

plt.rcParams['xtick.labelsize'] = 6

以下方法允许您在每个子批次的基础上进行设置:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

input_file = 'CSP.csv'
output_file = 'sub_plots.png'
df = pd.read_csv(input_file, header = 0)
classes = ['SD','SC','FIR','MD','UA','LB']

f, axarr = plt.subplots(2, 3)
f.tight_layout()
i=0

plt.tick_params(axis='both', which='major', labelsize=6)

for rows in axarr:
    for ax_c in rows:
        ax_c.hist(df.values, 10, rwidth=1, alpha=0.3)
        ax_c.set_title(classes[i])
        ax_c.spines['top'].set_visible(False)
        ax_c.spines['right'].set_visible(False)
        ax_c.spines['bottom'].set_visible(True)
        ax_c.spines['left'].set_visible(True)
        ax_c.get_xaxis().tick_bottom()
        ax_c.get_yaxis().tick_left()
        ax_c.tick_params(labelsize=6)
        i += 1

#save
plt.savefig(output_file)

您是否尝试将
plt.xticks(fontsize=6)
行移到循环外?@KunalVyas这只会更改创建的最后一个子图的刻度大小(就像现在一样)。我认为使用第一种方法更改单个图形的刻度大小而不是全局设置它会更“pythonic”?但我想两者都会得到相同的结果。是的,在这种情况下,两者都会得到相同的结果。这取决于您想做什么-例如,您可能在同一脚本中创建了其他子批次,您希望为其创建不同大小的标签,在这种情况下,您不希望将其设置为全局。谢谢,工作非常顺利。接受另一个答案,因为它更灵活,尽管这不在我的问题中。没问题,另一个答案更完整,并且给出了另一种(可能更好)做同样事情的方法。注意这也会改变
yticklab
的大小