在子图次要y轴上设置ylim

10
我想使用次坐标轴在子图中绘制数据。我可以设置ylim,但它只影响右侧的次y轴。我找不到一种方法来控制左侧主y轴上的ylim。我希望主y轴的限制为[0,40],次y轴的限制为[0,100]。
#import matplotlib.pylab as plt
import numpy as np
import pandas as pd
import csv
import string
%pylab inline
%matplotlib inline

# READ IN FIRST CSV
espr = pd.read_csv('out.csv')
df_e = pd.DataFrame(espr)

#READ IN SECOND CSV
heat = pd.read_csv('heat.csv',encoding='ISO-8859-1',low_memory=False)
heat = heat[2:]
df_h = pd.DataFrame(heat,dtype='float64')
df_h = df_h.reset_index(drop=True)

#READ IN THIRD CSV
temp = pd.read_csv('temp.csv',encoding='ISO-8859-1',low_memory=False)
temp = temp[2:]
df_t = pd.DataFrame(temp,dtype='float64')
df_t = df_t.reset_index(drop=True)

# CONCATENATE DATAFRAMES
df_e = df_e[[' building:time step (-)', ' building:zone 01:air point:temperature (oC)', ' building:zone 05:air point:temperature (oC)']]
df_h = df_h[['TIME', 'Tdb_amb']]
df_t = df_t[['Tavg_diurn', 'Tavg_seas']]
sim = pd.concat([df_h, df_t, df_e],axis=1)

# SEPARATE DATA FOR PLOTTING
mar = sim[14160:21600]

这是我遇到问题的地方,我已经阅读了有关将twinx()设置为不同坐标轴属性的内容,但每当我尝试实现它时,它告诉我不知道twinx是什么。
fig, axes = plt.subplots(nrows=2, ncols=1)
fig.set_figheight(25)
fig.set_figwidth(20)

mar[' building:zone 01:air point:temperature (oC)'].plot(ax=axes[0])
mar[' building:zone 05:air point:temperature (oC)'].plot(ax=axes[0])
mar['Tavg_diurn'].plot(secondary_y=True, ax=axes[0])
mar['Tavg_seas'].plot(secondary_y=True, ax=axes[0])
ylim([0,100])

fig.tight_layout()

“it tells me it doesn't know what twinx is” 是什么意思?你能否更新你的问题,附上显示完整堆栈跟踪消息的准确内容? - zehnpaard
2个回答

10

如果axes是包含两个轴的数组,你可以这样做:

Well if axes 是一个包含两个轴的数组,那么你可以这样做:

axes[0].set_ylim(0, 40)
axes[1].set_ylim(0, 100)

或者使用pyplot的twinx(),你可以尝试:

axes[0] = ax2.twinx()
axes[0].set_ylim(0, 40)
ax2.set_ylim(0, 100)

9
关键在于这里:axes[0].right_ax.set_ylim(0,100)
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline

fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(20, 10), sharex=True)

columns = [' building:zone 01:air point:temperature (oC)', ' building:zone 05:air point:temperature (oC)',
           'Tavg_diurn', 'Tavg_seas']
mar = pd.DataFrame(np.random.randn(1000, 4), index=pd.date_range('1/1/2010', periods=1000), columns=columns)
mar = mar.cumsum()
mar.plot(ax=axes[0], secondary_y=['Tavg_diurn', 'Tavg_seas'])
axes[0].set_ylim(0,40)
axes[0].right_ax.set_ylim(0,100)

A matplotlib figure resulting form the above code


请添加一个解释,说明您所做的更改以及为什么它应该解决 OP 的问题。 - jmattheis
糟糕,谢谢@jmattheis,我意识到我的两个解释是相同的。我缩短并简化以更清晰明了。 - numbers are fun

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