(我认为)我了解matplotlib中的twiny / x函数,但我确实在努力寻找如何在子图上下文中使用此函数的方法。我有一个这样的线图显示降雨数据:
由以下代码生成:
fig,ax = plt.subplots(3, figsize=(10,15),sharey=True)
ax[0].plot(YEAR1['pcp_1D_tot'], label='RG')
ax[0].plot(YEAR1['ppt_1D'], label='TRMM')
ax[0].set_title('Year 1',x=0.1,y=0.9)
ax[1].plot(YEAR2['pcp_1D_tot'], label='RG')
ax[1].plot(YEAR2['ppt_1D'], label='TRMM')
ax[1].set_title('Year 2',x=0.1,y=0.9)
ax[1].set_ylabel('Rainfall total (mm/day)')
ax[2].plot(YEAR3['pcp_1D_tot'], label='RG')
ax[2].plot(YEAR3['ppt_1D'], label='TRMM')
ax[2].set_title('Year 3',x=0.1,y=0.9)
ax[2].set_xlabel('Date')
fig.legend(loc=(0.8,0.9))
fig.tight_layout()
plt.show()
但是我还有要添加的洪水水位数据,它们分别存储在名为1、2和3的列中,分类为1、2和3。
YEAR1['Size']
我想将它们作为散点图绘制在线形图的顶部,以显示它们相对于降雨的发生率,因此我相信我需要在右侧添加另一个y轴,但是我不清楚如何做这个。
有人可以帮忙吗?
** ########### UPDATE ############### **
由于下面的贡献,我设法做到了以下几点,正是我所希望的:
通过使用以下代码:
x = YEAR1m.index #### these are referring to other data that has been filtered
y = YEAR2m.index
z = YEAR3m.index
fig,ax = plt.subplots(3, figsize=(10,15),sharey=True)
ax[0].plot(YEAR1['pcp_1D_tot'], label='RG')
ax[0].plot(YEAR1['ppt_1D'], label='TRMM')
ax[0].set_title('Year 1',x=0.1,y=0.9)
ax0 = ax[0].twinx()
ax0.scatter(x, YEAR1m['Size'], marker='*', color='r',s=100)
ax0.set_ylim([0,3.2])
ax0.set_yticklabels(['0',' ','1',' ','2',' ','3'])
ax[1].plot(YEAR2['pcp_1D_tot'], label='RG')
ax[1].plot(YEAR2['ppt_1D'], label='TRMM')
ax[1].set_title('Year 2',x=0.1,y=0.9)
ax[1].set_ylabel('Rainfall total (mm/day)')
ax1 = ax[1].twinx()
ax1.scatter(y, YEAR2m['Size'], marker='*', color='r',s=100)
ax1.set_ylim([0,3.2])
ax1.set_yticklabels(['0',' ','1',' ','2',' ','3'])
ax[2].plot(YEAR3['pcp_1D_tot'], label='RG')
ax[2].plot(YEAR3['ppt_1D'], label='TRMM')
ax[2].set_title('Year 3',x=0.1,y=0.9)
ax[2].set_xlabel('Date')
ax2 = ax[2].twinx()
ax2.scatter(z, YEAR3m['Size'], marker='*', color='r',s=100)
ax2.set_ylim([0,3.2])
ax2.set_yticklabels(['0',' ','1',' ','2',' ','3'])
# fig.legend(loc=(0.8,0.9))
fig.tight_layout()
plt.show()
答案 0 :(得分:1)
在没有数据的情况下,我只能提供一个猜测解决方案。以下应该工作。您将必须使用单个子图对象使用twinx
fig,ax = plt.subplots(3, figsize=(10,15),sharey=True)
ax[0].plot(YEAR1['pcp_1D_tot'], label='RG')
ax[0].plot(YEAR1['ppt_1D'], label='TRMM')
ax[0].set_title('Year 1',x=0.1,y=0.9)
ax0 = ax[0].twinx()
ax0.plot(YEAR1['Size'])
ax[1].plot(YEAR2['pcp_1D_tot'], label='RG')
ax[1].plot(YEAR2['ppt_1D'], label='TRMM')
ax[1].set_title('Year 2',x=0.1,y=0.9)
ax[1].set_ylabel('Rainfall total (mm/day)')
ax1 = ax[1].twinx()
ax1.plot(YEAR2['Size'])
ax[2].plot(YEAR3['pcp_1D_tot'], label='RG')
ax[2].plot(YEAR3['ppt_1D'], label='TRMM')
ax[2].set_title('Year 3',x=0.1,y=0.9)
ax[2].set_xlabel('Date')
ax2 = ax[2].twinx()
ax2.plot(YEAR3['Size'])
答案 1 :(得分:1)
我没有您的数据,让我们看看我是否了解您的问题...
常用的东西,
import matplotlib.pyplot as plt
import numpy as np
生成一些数据
x = np.linspace(0, 1.57, 21)
y = np.sin(x)
z = 4*np.random.random(21)
准备具有两个子图的图形-我将仅使用第一个子图来避免让您感到无聊-将寄生轴添加到当前图上,而不是在当前图上添加寄生轴, >
fig, (ax0, ax1) = plt.subplots(2, 1)
ax01 = ax0.twinx()
绘制曲线,使用不同的颜色绘制散点(这不会自动处理)
ax0.plot(x, y, color='blue')
ax01.scatter(x, z, color='red')
这是未要求的最终接触...(请注意,它是colors
,而不是color
)
ax0.tick_params(axis='y', colors='blue')
ax01.tick_params(axis='y', colors='red')
最后plt.show()
给了我们
我想补充一点:谢谢Rutger Kassies的fine answer,我的答案读者可以在此找到进一步的建议,以定制两个垂直刺的所有细节。