我有一個 Pandas 資料框,region其中包含英國地區隨時間推移的公寓 ( Flat) 和獨立物業 ( Detached)的價格(列Month)。我試圖獲得公寓和獨立物業價格隨時間變化的圖,以便這些圖有兩個不同的 y 軸 - 都是平均價格,但比例不同。
我已經通過使用實作了這一點twinx(),但是使用下面的代碼我顯然得到了兩個數字。這些數字中的第一個正是我想要的,但我隨后得到了第二個空白圖。我在下面附上了我想要的那種情節的截圖。
洗掉第二條無花果線時fig, ax2 = ...,出現錯誤NameError: name 'ax2' is not defined。將線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()

uj5u.com熱心網友回復:
為子圖創建輔助軸時,結果是一個新物件,并且不能使用像子圖軸這樣的陣列索引進行參考(除非您專門將新的雙軸添加到陣列中)。
您可能已經看過以下內容:
# with one axis
fig, ax = plt.subplots()
ax2 = ax.twinx()
ax2.plot(...)
但是對于多個子圖,同樣的邏輯適用:
# with one axis
fig, axes = plt.subplots(1, 2)
ax2 = axes[0].twinx()
ax2.plot(...) # secondary axis on subplot 0
ax2 = axes[1].twinx()
ax2.plot(...) # secondary axis on subplot 1
在你的情況下:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/350777.html
標籤:Python 熊猫 matplotlib 阴谋 双胞胎
上一篇:seaborn熱圖顯示軸標簽,但當df.corr為NaN時沒有值
下一篇:創建多索引列資料框
