[英]How do you plot two different y-axes using a loop with twinx?
我有一個 Pandas 數據框region
,其中包含隨着時間的推移(列Month
)英國地區的公寓 ( Flat
) 和獨立物業 ( Detached
) 的價格。 我試圖獲得公寓和獨立物業價格隨時間變化的圖,以便這些圖有兩個不同的 y 軸 - 都是平均價格,但比例不同。
我通過使用twinx()
實現了這一點,但是使用下面的代碼我顯然得到了兩個數字。 這些數字中的第一個正是我想要的,但我隨后得到了第二個空白圖。 我在下面附上了我想要的那種情節的截圖。
刪除第二條無花果線fig, ax2 = ...
,出現錯誤NameError: name 'ax2' is not defined
。 ax2 = ax.twinx()
行ax2 = ax.twinx()
帶出循環會給出錯誤AttributeError: 'numpy.ndarray' object has no attribute 'twinx'
。 我似乎無法弄清楚如何在沒有重復空白圖的情況下使該圖正常工作,非常感謝任何幫助。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
region_list = sorted(region['Area'].unique().tolist())
fig, ax = plt.subplots(nrows=len(region_list), figsize=(13.8,len(region_list)*7))
fig, ax2 = plt.subplots(nrows=len(region_list), figsize=(13.8,len(region_list)*7))
for i in region_list:
ind = region_list.index(i)
filt = region['Area'] == i
ax2[ind] = ax[ind].twinx()
ax[ind].plot(region.loc[filt]['Month'],region.loc[filt]['Flat'], color='red', marker='o')
ax[ind].set_ylabel('Average price of flats', color='red', fontsize=14)
ax2[ind].plot(region.loc[filt]['Month'],region.loc[filt]['Detached'],color='blue',marker='o')
ax2[ind].set_ylabel('Average price of detached properties',color='blue',fontsize=14)
ax[ind].set_title(i, size=14)
ax[ind].xaxis.set_tick_params(labelsize=10)
ax[ind].yaxis.set_tick_params(labelsize=10)
plt.tight_layout()
您快到了。 不要創建第二個圖,也不要嘗試索引您在 for 循環中創建的輔助軸:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
region_list = sorted(region['Area'].unique().tolist())
fig, ax = plt.subplots(nrows=len(region_list), figsize=(13.8,len(region_list)*7))
# don't add a second plot - this would be blank
# fig, ax2 = plt.subplots(nrows=len(region_list), figsize=(13.8,len(region_list)*7))
for i in region_list:
ind = region_list.index(i)
filt = region['Area'] == i
# don't index into ax2
# ax2[ind] = ax[ind].twinx()
# instead, create a local variable ax2 which is the secondary axis
# on the subplot ax[ind]
ax2 = ax[ind].twinx()
ax[ind].plot(region.loc[filt]['Month'],region.loc[filt]['Flat'], color='red', marker='o')
ax[ind].set_ylabel('Average price of flats', color='red', fontsize=14)
ax2.plot(region.loc[filt]['Month'],region.loc[filt]['Detached'],color='blue',marker='o')
ax2.set_ylabel('Average price of detached properties',color='blue',fontsize=14)
ax[ind].set_title(i, size=14)
ax[ind].xaxis.set_tick_params(labelsize=10)
ax[ind].yaxis.set_tick_params(labelsize=10)
plt.tight_layout()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.