如何使 y 轴标签在 seaborn 中居中对齐?
How to make y-axis labels center-aligned in seaborn?
我在 seaborn 中生成了两个共享 y 轴的图。我想知道如何使共享的 y 轴标签居中对齐。我正在寻找一些想法和改进。剧情附后。
import seaborn as sns
import matplotlib.pylab as plt
import numpy as np
import string
import random
labels = []
for i in range(10):
labels.append(''.join(random.choices(string.ascii_lowercase, k=4)))
labels.append(''.join(random.choices(string.ascii_lowercase, k=7)))
score = np.abs(np.random.randn(20))
fig, axes = plt.subplots(1,2 , figsize=(5,5 ), sharey=True )
for ii in range(2):
ti = sns.barplot(y=[j for j in range(len(score))],x=score, ax=axes[ii],
orient='h' )
ti.set_yticklabels(labels)
if ii ==0:
ti.invert_xaxis()
ti.yaxis.tick_right()
fig.tight_layout(w_pad=0, pad=1)
plt.show()
ti.set_yticklabels(labels)
具有使用 ha
、multi-align 文本与 ma
水平对齐的选项。我已经使用了 ha 并使用 position
参数进行了调整。好像对齐了可能这也有助于设计和使用它以获得正确的格式。 Reference here(看其他参数)
以下仅是部分更改的更新代码段:
for ii in range(2):
ti = sns.barplot(y=[j for j in range(len(score))],x=score, ax=axes[ii],
orient='h')
ti.set_yticklabels(labels, ha="center", position=(1.2,0)) # ha and position adjustments.
if ii ==0:
ti.invert_xaxis()
ti.yaxis.tick_right()
plt.tight_layout(w_pad=0, pad=2.5) # Some padding adjustments.
plt.show()
最终输出如下所示:
我在 seaborn 中生成了两个共享 y 轴的图。我想知道如何使共享的 y 轴标签居中对齐。我正在寻找一些想法和改进。剧情附后。
import seaborn as sns
import matplotlib.pylab as plt
import numpy as np
import string
import random
labels = []
for i in range(10):
labels.append(''.join(random.choices(string.ascii_lowercase, k=4)))
labels.append(''.join(random.choices(string.ascii_lowercase, k=7)))
score = np.abs(np.random.randn(20))
fig, axes = plt.subplots(1,2 , figsize=(5,5 ), sharey=True )
for ii in range(2):
ti = sns.barplot(y=[j for j in range(len(score))],x=score, ax=axes[ii],
orient='h' )
ti.set_yticklabels(labels)
if ii ==0:
ti.invert_xaxis()
ti.yaxis.tick_right()
fig.tight_layout(w_pad=0, pad=1)
plt.show()
ti.set_yticklabels(labels)
具有使用 ha
、multi-align 文本与 ma
水平对齐的选项。我已经使用了 ha 并使用 position
参数进行了调整。好像对齐了可能这也有助于设计和使用它以获得正确的格式。 Reference here(看其他参数)
以下仅是部分更改的更新代码段:
for ii in range(2):
ti = sns.barplot(y=[j for j in range(len(score))],x=score, ax=axes[ii],
orient='h')
ti.set_yticklabels(labels, ha="center", position=(1.2,0)) # ha and position adjustments.
if ii ==0:
ti.invert_xaxis()
ti.yaxis.tick_right()
plt.tight_layout(w_pad=0, pad=2.5) # Some padding adjustments.
plt.show()
最终输出如下所示: