增加子图的 y 刻度标签时,matplotlib 轴标签丢失
matplotlib axis label lost when increasing y tick labels for subplot
为什么指定时 y 轴标签丢失:ax.set_yticklabels(ax.get_yticklabels(), fontsize=16)
%pylab inline
import pandas as pd
import seaborn as sns; sns.set()
df = pd.DataFrame({'dt':['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04'], 'category':['a', 'b', 'a', 'b'], 'foo':[10, 15, 8, 13], 'bar':[12, 8, 5, 18]})
df['dt'] = pd.to_datetime(df['dt'])
plt.figure()
ax0 = plt.subplot(211)
ax = sns.lineplot(x='dt', y='foo', data=df, hue='category', ax=ax0)
ax.set_yticklabels(ax.get_yticklabels(), fontsize=16)
plt.show()
编辑
plt.yticks(fontsize=16)
虽然工作得很好。但是,我必须使用 theo object-oriented API 因为我在更复杂的情节中使用它。否则,plt
指错轴。
尝试将其替换为:
ax.set_yticklabels(ax.get_yticks(), fontsize=16)
简短解释为什么 ax.set_yticklabels(ax.get_yticklabels(), fontsize=16)
给你空的 y 标签:
如果你print (ax.get_yticklabels()[:])
,它给你:
[Text(1, 0, ''), Text(1, 0, ''), Text(1, 0, ''), Text(1, 0, ''), Text(1, 0, '')]
注意每个子列表的最后一项是空字符串,它们将被视为您的ylabel。
因此它等同于 ax.set_yticklabels(labels=[], fontsize=16)
您可以只使用 tick_params
函数并指定哪个轴。对于两个轴,使用 axis='both'
ax.tick_params(axis='y', labelsize=16)
为什么指定时 y 轴标签丢失:ax.set_yticklabels(ax.get_yticklabels(), fontsize=16)
%pylab inline
import pandas as pd
import seaborn as sns; sns.set()
df = pd.DataFrame({'dt':['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04'], 'category':['a', 'b', 'a', 'b'], 'foo':[10, 15, 8, 13], 'bar':[12, 8, 5, 18]})
df['dt'] = pd.to_datetime(df['dt'])
plt.figure()
ax0 = plt.subplot(211)
ax = sns.lineplot(x='dt', y='foo', data=df, hue='category', ax=ax0)
ax.set_yticklabels(ax.get_yticklabels(), fontsize=16)
plt.show()
编辑
plt.yticks(fontsize=16)
虽然工作得很好。但是,我必须使用 theo object-oriented API 因为我在更复杂的情节中使用它。否则,plt
指错轴。
尝试将其替换为:
ax.set_yticklabels(ax.get_yticks(), fontsize=16)
简短解释为什么 ax.set_yticklabels(ax.get_yticklabels(), fontsize=16)
给你空的 y 标签:
如果你print (ax.get_yticklabels()[:])
,它给你:
[Text(1, 0, ''), Text(1, 0, ''), Text(1, 0, ''), Text(1, 0, ''), Text(1, 0, '')]
注意每个子列表的最后一项是空字符串,它们将被视为您的ylabel。
因此它等同于 ax.set_yticklabels(labels=[], fontsize=16)
您可以只使用 tick_params
函数并指定哪个轴。对于两个轴,使用 axis='both'
ax.tick_params(axis='y', labelsize=16)