第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當軸關系根據經驗推導時,如何在matplotlib圖中配置次軸?

當軸關系根據經驗推導時,如何在matplotlib圖中配置次軸?

翻翻過去那場雪 2022-09-06 21:07:50
我試圖遵循這個文檔https://matplotlib.org/3.1.0/gallery/subplots_axes_and_figures/secondary_axis.html在輔助軸變換的第三種情況下,即,當“我們希望將變換中的軸與數據臨時的,并且是經驗推導的”時,因此,將“正向和逆變換函數設置為從一個數據集到另一個數據集的線性插值”。但我無法取得令人滿意的結果。例如,考慮本文檔第一個示例的簡單圖:具有兩個水平軸的正弦波,其中一個是同一圖上弧度到度的轉換。下面的代碼波紋管給出了正確的結果,其中底部軸以弧度為單位,頂部軸以度為單位import matplotlib.pyplot as pltimport numpy as npfig, ax = plt.subplots(constrained_layout=True)x = np.linspace(0, 2*np.pi, 1000)y = np.sin(x)ax.plot(x, y)def deg2rad(x):    return x * np.pi / 180def rad2deg(x):    return x * 180 / np.pisecax = ax.secondary_xaxis('top', functions=(rad2deg,deg2rad))plt.show()但是,下面的代碼試圖模擬“度軸”將來自經驗數據(數組變量,可能是其他值),但它沒有給出正確的結果(遵循文檔的插值函數)。xnewimport matplotlib.pyplot as pltimport numpy as npfig, ax = plt.subplots(constrained_layout=True)x = np.linspace(0, 2*np.pi, 1000)y = np.sin(x)ax.plot(x, y)xold = xxnew = x * 180 / np.pidef forward(x):    return np.interp(x, xold, xnew)def inverse(x):    return np.interp(x, xnew, xold)secax = ax.secondary_xaxis('top', functions=(forward,inverse))plt.show()我錯過了什么?
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

問題在于,對于略微超出給定 x 值范圍的值,同時調用正向函數和反函數。例如,它們用于 xlims。(可以在這些函數中添加一個,看看它們是如何被調用的。print(x)


如果將這些函數編寫為簡單的線性變換(如示例中所示),則沒有問題。該函數在其邊界之外同樣工作。但是 a 在其范圍之外沒有很好的線索,因此它返回其下限或上限。這種截止會導致不需要的蜱蟲標簽。deg2radnp.interp


對于零件,這可以通過設置緊密的x軸來補救,因此沒有默認發(fā)生的填充:


plt.autoscale(enable=True, axis='x', tight=True)

但即便如此,400的不受歡迎的蜱蟲也會彈出。


更好的解決方案是使兩個函數的范圍比舊 x 軸上顯示的限制(包括填充)稍寬。例如,設置


xold = np.linspace(x[0]-0.5, x[-1]+0.5, 100)

xnew = xold * 180 / np.pi

請注意,在鏈接的示例中,他們設置了 ,但隨后僅從第三個索引開始執(zhí)行繪圖,以便為填充創(chuàng)建足夠的空間:。xold = np.arange(0, 11, 0.2)ax.plot(xold[3:], xnew[3:])


完整的示例可能如下所示:


import matplotlib.pyplot as plt

import numpy as np


fig, ax = plt.subplots(constrained_layout=True)

x = np.linspace(0, 2*np.pi, 1000)

y = np.sin(x)

ax.plot(x, y)


xold = np.linspace(x[0]-0.5, x[-1]+0.5, 100)

xnew = xold * 180 / np.pi


def forward(x):

    return np.interp(x, xold, xnew)


def inverse(x):

    return np.interp(x, xnew, xold)


secax = ax.secondary_xaxis('top', functions=(forward,inverse))


plt.show()

http://img1.sycdn.imooc.com//6317465d000148e717640669.jpg

查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號