将高度数据从 CSV 文件转换为 IMG
Converting height data from CSV file to IMG
我有一些来自显微镜的高度数据。我的问题是:如何将 CSV 文件转换为 IMG 输出并正确缩放颜色?我拥有的数据是 CSV 文件,例如:
90,40,50,30,20
11, 2, 7,30,20
90,40,50,30,50
16,40,50, 4, 6
90, 4,50,30,20
...
其中列是 x 坐标,行是 y 坐标,条目是 z 坐标。
也应该在一个固定的范围内。就是说生成的图片不应该在最高值和最低值之上生成,这样多个文件才具有可比性。
到目前为止我所做的是:
IMG = genfromtxt('RohCSV/{}.csv'.format(filename), delimiter=',')
这种方法可行,但我遇到了比例问题。结果没有可比性。
我希望这是可以理解的。
这取决于你如何比较输出。例如,当使用 Matplotlib 时,您应该默认获得 min/max 标准化输出。让我们看下面的例子:
from matplotlib import pyplot as plt
import numpy as np
plt.figure(1, figsize=(12, 5))
# Original data/image
IMG = np.genfromtxt('test.csv', delimiter=',')
plt.subplot(1, 2, 1), plt.imshow(IMG), plt.colorbar()
# Min/max normalized data/image
IMG = IMG - np.min(IMG)
IMG = IMG / np.max(IMG)
plt.subplot(1, 2, 2), plt.imshow(IMG), plt.colorbar()
plt.tight_layout()
plt.show()
这就是输出:
如您所见,Matplotlib 的默认输出(左)和显式 min/max 归一化 data/image 的输出(右)是相等的。
除此之外,呈现的 min/max 规范化应该是您正在寻找的。
希望对您有所帮助!
-----------------------
System information
-----------------------
Python: 3.8.1
Matplotlib: 3.2.0rc1
NumPy: 1.18.1
-----------------------
编辑: 在评论中澄清后,我想在 Matplotlib 的 imshow
中使用 vmin
和 vmax
参数可能是最简单的要走的路:
from matplotlib import pyplot as plt
import numpy as np
def plot_scaled(data, min_scale, max_scale):
plt.imshow(data, vmin=min_scale, vmax=max_scale), plt.colorbar()
# Original data/image
IMG = np.genfromtxt('test.csv', delimiter=',')
# Artificial data
IMG_large = IMG + 10
IMG_even_larger = IMG + 100
plt.figure(1, figsize=(15, 4))
for i, img in enumerate([IMG, IMG_large, IMG_even_larger]):
plt.subplot(1, 3, i+1), plot_scaled(img, 0, 200)
plt.tight_layout()
plt.show()
值 100 在所有三个图中具有相同的颜色。
我有一些来自显微镜的高度数据。我的问题是:如何将 CSV 文件转换为 IMG 输出并正确缩放颜色?我拥有的数据是 CSV 文件,例如:
90,40,50,30,20
11, 2, 7,30,20
90,40,50,30,50
16,40,50, 4, 6
90, 4,50,30,20
...
其中列是 x 坐标,行是 y 坐标,条目是 z 坐标。
也应该在一个固定的范围内。就是说生成的图片不应该在最高值和最低值之上生成,这样多个文件才具有可比性。
到目前为止我所做的是:
IMG = genfromtxt('RohCSV/{}.csv'.format(filename), delimiter=',')
这种方法可行,但我遇到了比例问题。结果没有可比性。
我希望这是可以理解的。
这取决于你如何比较输出。例如,当使用 Matplotlib 时,您应该默认获得 min/max 标准化输出。让我们看下面的例子:
from matplotlib import pyplot as plt
import numpy as np
plt.figure(1, figsize=(12, 5))
# Original data/image
IMG = np.genfromtxt('test.csv', delimiter=',')
plt.subplot(1, 2, 1), plt.imshow(IMG), plt.colorbar()
# Min/max normalized data/image
IMG = IMG - np.min(IMG)
IMG = IMG / np.max(IMG)
plt.subplot(1, 2, 2), plt.imshow(IMG), plt.colorbar()
plt.tight_layout()
plt.show()
这就是输出:
如您所见,Matplotlib 的默认输出(左)和显式 min/max 归一化 data/image 的输出(右)是相等的。
除此之外,呈现的 min/max 规范化应该是您正在寻找的。
希望对您有所帮助!
-----------------------
System information
-----------------------
Python: 3.8.1
Matplotlib: 3.2.0rc1
NumPy: 1.18.1
-----------------------
编辑: 在评论中澄清后,我想在 Matplotlib 的 imshow
中使用 vmin
和 vmax
参数可能是最简单的要走的路:
from matplotlib import pyplot as plt
import numpy as np
def plot_scaled(data, min_scale, max_scale):
plt.imshow(data, vmin=min_scale, vmax=max_scale), plt.colorbar()
# Original data/image
IMG = np.genfromtxt('test.csv', delimiter=',')
# Artificial data
IMG_large = IMG + 10
IMG_even_larger = IMG + 100
plt.figure(1, figsize=(15, 4))
for i, img in enumerate([IMG, IMG_large, IMG_even_larger]):
plt.subplot(1, 3, i+1), plot_scaled(img, 0, 200)
plt.tight_layout()
plt.show()
值 100 在所有三个图中具有相同的颜色。