簡體   English   中英

如何使用帶有 twinx 的循環繪制兩個不同的 y 軸?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM