yticks 的字体大小意外可变
yticks have unexpectedly variable font size
我正在修改图形的 yticks 字体大小,但并非所有 yticks 的字体大小都相同。最后两个 yticks 0.8
和 0.6
比其他的大。
def mm_to_inch(value):
return value/25.4
import matplotlib
matplotlib.use('Agg')
matplotlib.rcParams['font.sans-serif'] = "Arial"
matplotlib.rcParams['font.family'] = "sans-serif"
matplotlib.rcParams['figure.dpi'] = 300
import pandas as pd
import matplotlib.pyplot as plt
size = 112
fig, ax1 = plt.subplots(figsize=(mm_to_inch(size), mm_to_inch(size/2)))
df = pd.read_csv('testing_errors_prob.csv')
df = df.drop(['precision', 'recall', 'TP', 'FP', 'TN', 'FN'], axis=1)
df = df.sort_values(by=['accuracy'], ascending=False)
df = df.replace({'Gaussian Nb': 'Gaussian\nNb', 'Extra Trees': 'Extra\nTrees', 'Random Forest': 'Random\nForest',
'Decision Tree': 'Decision\nTree', 'Gradient Boost': 'Gradient\nBoost', 'Linear SVC': 'Linear\nSVC',
'Ada Boost': 'Ada\nBoost', 'Bernouli Nb': 'Bernouli\nNb'})
df.plot.bar(x='model', ax=ax1, color=['#093145', '#107896', '#829356'], width=0.8)
plt.tight_layout()
# plt.xticks(rotation=45, ha="right", fontsize=6)
# plt.yticks(fontsize=6)
plt.xticks(rotation=45, ha="right", fontsize=6)
plt.yticks(fontsize=6)
plt.legend(["Accuracy", "F1", "AUC ROC"], fontsize="xx-large", prop={'size': 5})
plt.subplots_adjust(left=0.07, right=0.9, top=0.9, bottom=0.2)
plt.xlabel('')
plt.savefig('results_updateddd_{}.png'.format(size))
plt.savefig('results_updateddd_{}.pdf'.format(size))
plt.close()
图形是这样的:
我仍然不确定为什么,但错误来自 plt.yticks(fontsize=6)
。我将其删除并替换为
ax1.tick_params(axis='both', which='major', labelsize=6)
主要问题是 subplots_adjust
在改变子图布局时导致新的 yticks
出现:
yticks(fontsize=6)
仅针对现有报价,因此不会影响任何未来出现的报价(例如,出现在 subplots_adjust
之后的新报价)
tick_params(labelsize=6)
设置整个 Axes
的刻度大小,因此即使出现新的刻度,它们也会自动继承这个刻度大小Axes
的一部分
所以如果你想使用yticks(fontsize=6)
方法,一定要最后调用它:
...
plt.subplots_adjust(left=0.07, right=0.9, top=0.9, bottom=0.2)
plt.yticks(fontsize=6)
...
fontsize
-> subplots_adjust
subplots_adjust
-> fontsize
我正在修改图形的 yticks 字体大小,但并非所有 yticks 的字体大小都相同。最后两个 yticks 0.8
和 0.6
比其他的大。
def mm_to_inch(value):
return value/25.4
import matplotlib
matplotlib.use('Agg')
matplotlib.rcParams['font.sans-serif'] = "Arial"
matplotlib.rcParams['font.family'] = "sans-serif"
matplotlib.rcParams['figure.dpi'] = 300
import pandas as pd
import matplotlib.pyplot as plt
size = 112
fig, ax1 = plt.subplots(figsize=(mm_to_inch(size), mm_to_inch(size/2)))
df = pd.read_csv('testing_errors_prob.csv')
df = df.drop(['precision', 'recall', 'TP', 'FP', 'TN', 'FN'], axis=1)
df = df.sort_values(by=['accuracy'], ascending=False)
df = df.replace({'Gaussian Nb': 'Gaussian\nNb', 'Extra Trees': 'Extra\nTrees', 'Random Forest': 'Random\nForest',
'Decision Tree': 'Decision\nTree', 'Gradient Boost': 'Gradient\nBoost', 'Linear SVC': 'Linear\nSVC',
'Ada Boost': 'Ada\nBoost', 'Bernouli Nb': 'Bernouli\nNb'})
df.plot.bar(x='model', ax=ax1, color=['#093145', '#107896', '#829356'], width=0.8)
plt.tight_layout()
# plt.xticks(rotation=45, ha="right", fontsize=6)
# plt.yticks(fontsize=6)
plt.xticks(rotation=45, ha="right", fontsize=6)
plt.yticks(fontsize=6)
plt.legend(["Accuracy", "F1", "AUC ROC"], fontsize="xx-large", prop={'size': 5})
plt.subplots_adjust(left=0.07, right=0.9, top=0.9, bottom=0.2)
plt.xlabel('')
plt.savefig('results_updateddd_{}.png'.format(size))
plt.savefig('results_updateddd_{}.pdf'.format(size))
plt.close()
图形是这样的:
我仍然不确定为什么,但错误来自 plt.yticks(fontsize=6)
。我将其删除并替换为
ax1.tick_params(axis='both', which='major', labelsize=6)
主要问题是 subplots_adjust
在改变子图布局时导致新的 yticks
出现:
yticks(fontsize=6)
仅针对现有报价,因此不会影响任何未来出现的报价(例如,出现在subplots_adjust
之后的新报价)tick_params(labelsize=6)
设置整个Axes
的刻度大小,因此即使出现新的刻度,它们也会自动继承这个刻度大小Axes
的一部分
所以如果你想使用yticks(fontsize=6)
方法,一定要最后调用它:
...
plt.subplots_adjust(left=0.07, right=0.9, top=0.9, bottom=0.2)
plt.yticks(fontsize=6)
...
fontsize -> subplots_adjust |
subplots_adjust -> fontsize |
---|---|