簡體   English   中英

如何在matplotlib中將軸尺寸從像素更改為長度? 一般有什么代碼嗎?

[英]How to change the axis dimension from pixel to length in matplotlib? is there any code in general?

由於完整的仿真要在此處發布,因此只給出了繪制頻譜的代碼(我認為這足夠了)

d = i.sum(axis=2)
pylab.figure(figsize=(15,15))
pylab = imshow(d)
plt.axis('tight')
pylab.show()

該光譜以像素為單位。 但我想以長度為單位。 我希望您能給我一些建議。

您是否要讓軸刻度線顯示自定義尺寸,而不是d的像素數? 如果是,請使用imshowextent關鍵字:

import numpy
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt

d = numpy.random.normal(size=(20, 40))

fig = plt.figure()
s = fig.add_subplot(1, 1, 1)
s.imshow(d, extent=(0, 1, 0, 0.5), interpolation='none')
fig.tight_layout()
fig.savefig('tt.png')

在此處輸入圖片說明

我有點想知道您的問題是什么,所以讓我們從我的解釋開始/您有一些使用imshow繪制的2D數據dxy軸上的單位是像素數。 例如,在下面的示例中,我們看到x軸從0-> 10標記為數據點數:

import numpy as np
import matplotlib.pyplot as plt

# Generate a fake d
x = np.linspace(-1, 1, 10)
y = np.linspace(-1, 1, 10)
X, Y = np.meshgrid(x, y)
d = np.sin(X**2 + Y**2)

plt.imshow(d)

在此處輸入圖片說明

如果這正確地描述了您的問題,那么解決方案是避免使用旨在繪制圖像的imshow 首先,這將有助於imshow進行插值以提供更平滑的圖像(這可能會隱藏光譜中的特征),其次,因為它是圖像,因此沒有有意義的xy數據,因此不會對其進行繪制。

最好的替代方法是使用plt.pcolormesh生成2D數組的偽彩色圖,並以XY作為參數,它們都是d值所對應的點的2D數組。

例如:

# Generate a fake d
x = np.linspace(-1, 1, 10)
y = np.linspace(-1, 1, 10)
X, Y = np.meshgrid(x, y)
d = np.sin(X**2 + Y**2)

plt.pcolormesh(X, Y, d)

在此處輸入圖片說明

現在, xy值對應於XY的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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