将次要y轴刻度与主x轴上的条形图对齐

4
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
labels1 = ['A','B','C','D']
labels2 = ['E','F','G','H']

fig, ax = plt.subplots()
df = pd.DataFrame(np.random.random(size=(10,4)), columns=('A','B','C','D'))
sns.stripplot(data=df, orient='h', ax=ax)
ax2 = ax.twinx()
ax2.set(yticks=ax.get_yticks(), yticklabels=labels2);

生成的图表链接

我想在第二个y轴上生成一些标签,使它们与主要y轴上的stripplot的y轴刻度线对齐。我想让E与D在同一高度上,F与C等等。

我尝试了一些不同的方法来对齐刻度,但没有成功。

如果您有其他建议如何添加这些标签,欢迎提出。

1个回答

2

使用ax.set_ylim(ax.get_ylim())来设置坐标轴的上下限,保持两个坐标轴一致。

同时,前面已经使用ax2.set(yticks=ax.get_yticks(), yticklabels=labels2)正确地设置了刻度线。现在需要处理的是坐标轴的范围,这两个坐标轴的范围应该相同。

ax2.set_ylim(ax.get_ylim())

或者跟随使用 .set:
ax2.set(yticks=ax.get_yticks(), yticklabels=labels2, ylim=ax.get_ylim())

完整示例:

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

labels1 = ['A','B','C','D']
labels2 = ['E','F','G','H']

fig, ax = plt.subplots()
df = pd.DataFrame(np.random.random(size=(10,4)), columns=('A','B','C','D'))
sns.stripplot(data=df, orient='h', ax=ax)
ax2 = ax.twinx()
ax2.set(yticks=ax.get_yticks(), yticklabels=labels2, ylim=ax.get_ylim())

plt.show()

enter image description here


清晰的解决方案,当你像这样表达时,它就变得如此简单。如果有任何有效的替代方案,不需要为刻度创建第二个轴,我仍然很乐意听取建议。 - ac24
虽然轴的右侧有标记刻度的选项,但它们始终与左侧相同。因此,在两侧都放置A、B、C、D等内容很容易,但由于它们应该在这里是不同的,需要使用不同的轴,就像你在这里所做的那样。 - ImportanceOfBeingErnest
我记得曾经提出过一个功能请求(https://github.com/matplotlib/matplotlib/issues/8181),关于独立使用第二个标签,但该请求仍然未处理。 - ImportanceOfBeingErnest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接