Python 为什么使用ax.twiny会将映射到第二个轴的图形向右移动?

Python 为什么使用ax.twiny会将映射到第二个轴的图形向右移动?,python,matplotlib,Python,Matplotlib,我试图让我的身材共享相同的y轴,但在x轴上有不同的比例。问题是,当我尝试将第二个图形映射到第二个轴(ax1=ax.twny)时,该图形似乎从应该的位置向右移动。下面是一个演示我的问题的最简单的工作示例 import numpy as np import matplotlib.pyplot as plt from matplotlib import rc import pandas as pd r = [0,1,2,3,4] raw_data = {'greenBars': [20, 1.5,

我试图让我的身材共享相同的y轴,但在x轴上有不同的比例。问题是,当我尝试将第二个图形映射到第二个轴(
ax1=ax.twny
)时,该图形似乎从应该的位置向右移动。下面是一个演示我的问题的最简单的工作示例

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

r = [0,1,2,3,4]
raw_data = {'greenBars': [20, 1.5, 7, 10, 5], 'orangeBars': [5, 15, 5, 10, 15],'blueBars': [2, 15, 18, 5, 10]}
df = pd.DataFrame(raw_data)
totals = [i+j+k for i,j,k in zip(df['greenBars'], df['orangeBars'], df['blueBars'])]
greenBars = [i / j * 100 for i,j in zip(df['greenBars'], totals)]

f, ax = plt.subplots(1, figsize=(6,6))
ax.barh(r, greenBars, color='#b5ffb9', edgecolor='white', height=0.85)
df = pd.DataFrame({'group':['A', 'B', 'C', 'D', 'E'], 'values':[300,250,150,50,10] })
ax1 = ax.twiny() 
ax1.hlines(y=groups, xmin=0, xmax=df['values'], color='black', linewidth=1.5);

plt.show()
其中,我的预期结果是让
ax1.hlines
向左移动到帧中(如下图中的箭头所示)。有人对如何纠正这种行为有什么建议吗


barh
通常将下限设置为
0
,而
plot
或其他设置为稍低的美学值。要解决此问题,请手动为ax1设置xlim:

... 

f, ax = plt.subplots(1, figsize=(6,6))
ax.barh(r, greenBars, color='#b5ffb9', edgecolor='white', height=0.85)
df = pd.DataFrame({'group':['A', 'B', 'C', 'D', 'E'], 'values':[300,250,150,50,10] })
ax1 = ax.twiny() 
ax1.hlines(y=df['group'], xmin=0, xmax=df['values'], color='black', linewidth=1.5);

# this is added
ax1.set_xlim(0)
plt.show()
输出: