我正在嘗試從矩陣z2上的光柵創建影像,該光柵由np.meshgrid(grid_x, grid_y)這樣的影像的值定義vx=grid_x[i], vy=grid_y[j]為z2[i, j]。在此影像之上,我嘗試添加由三個向量獲得的多個點的散點圖,以x, y, z使第 i 個點具有坐標(x[k], y[k])和值z[k]。所有這些分散的點都位于上述柵格的區域內。
這是我試圖繪制的上述資料的示例。
import numpy as np
np.random.seed(1)
z2 = np.ones((1000, 1000)) * 0.66
z2[0, 0] = 0
z2[-1, -1] = 1
x = np.random.rand(1000) * 1000
y = np.random.rand(1000) * 1000
z = np.random.rand(1000)
grid_x = np.linspace(0, 999, 1000)
grid_y = np.linspace(0, 999, 1000)
為了做到這一點,我使用了一個 2D 圖,其中 x 和 y 值用于定義點的位置,z 由從顏色圖中繪制的顏色指示。
此影像的要求是 1) 實際繪圖和圖形邊緣之間不應有空白;2)x軸和y軸上的單位長度應該相等;3) 圖片不宜過大。為了實作這些,我使用以下代碼進行繪圖。
import matplotlib.pyplot as plt
from matplotlib import cm
def plot_img(x, y, z, grid_x, grid_y, z2, set_fig_size=True):
# determine the figure size
if set_fig_size:
height, width = np.array(z2.shape, dtype=float)
dpi = max(max(640 // height, 640 // width), 1)
width, height = width * dpi, height * dpi
plt.gcf().set_size_inches(width, height)
plt.gcf().set_dpi(dpi)
# plot the figure
plt.gca().axis('off')
plt.gca().axis('equal')
plt.gca().set_position([0, 0, 1, 1])
plt.xlim((grid_x[0], grid_x[-1]))
plt.ylim((grid_y[0], grid_y[-1]))
# the raster
cmap = cm.get_cmap('gray')
cmap.set_bad(color='red', alpha=0.5)
plt.imshow(z2, cmap=cmap, interpolation='none', origin='lower',
extent=(grid_x[0], grid_x[-1], grid_y[0], grid_y[-1]))
# the scatter plot
min_z, max_z = np.min(z), np.max(z)
c = (z - min_z) / (max_z - min_z)
plt.scatter(x, y, marker='o', c=c, cmap='Greens')
plt.show()
奇怪的是,當我plot_img(x, y, z, grid_x, grid_y, z2)使用上述示例資料運行時,會出現以下影像。

本質上,只繪制了柵格資料,而沒有繪制散點資料。
然后我嘗試了plot_img(x, y, z, grid_x, grid_y, z2, set_fig_size=False)。結果是

請注意,這里為了清楚地顯示圖中的空白,我保留了 PyCharm 的背景圍繞它。本質上,我不希望在此圖中包含空白。
我想知道為什么會這樣,以及如何修復代碼以獲得正確的輸出,這本質上是沒有空格的第二個結果。謝謝!
uj5u.com熱心網友回復:
將您的 dpi 和 figsize 代碼替換為
# determine the figure size
height, width = np.array(z2.shape, dtype=float)
dpi = 200
# get size in inches:
width, height = height / dpi, width / dpi
plt.gcf().set_size_inches(width, height)
plt.gcf().set_dpi(dpi)
你將有一個 1000x1000 像素的圖形,在 200 dpi 下是 5"x5"。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/415770.html
標籤:
