引言
共定位散点图是一种可视化技术,用于展示两种不同信号在图像中的空间相关性。它通过将两个图像的像素强度值绘制在散点图上,帮助我们理解这些信号是否在相同的空间区域出现,以及它们的相关性强度。这在生物医学领域特别有用,比如研究抗癌药物对细胞内蛋白质分布的影响,或者分析不同荧光标记的分子在细胞中的共定位情况。
本期内容小编为大家分享快速使用Python实现共定位散点图的绘制方法。通过我们分享的这段代码,可以读取两张图像,提取其像素亮度值,计算它们的相关性,并绘制出漂亮的共定位散点图,同时提供拟合线和颜色条的选项。
代码详解
第一步:导入所需库
首先,我们需要导入一些Python库,这些库将帮助我们处理图像和绘制图表。
1
2
3
4
5
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from matplotlib.colors import LinearSegmentedColormap
from scipy import stats
第二步:定义绘图函数
接下来,我们定义一个函数plot_scatter_with_fit
,这个函数会读取两张图片,提取它们的亮度值,计算相关性,并绘制散点图。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
def plot_scatter_with_fit(pic1, pic2, step_size=1, fit=1, colorbar=1):
# 读取图片并转换为灰度图像
img1 = Image.open(pic1).convert('L')
img2 = Image.open(pic2).convert('L')
# 提取像素亮度值
intensity1 = np.array(img1).flatten()
intensity2 = np.array(img2).flatten()
# 计算皮尔逊相关系数
pearson_corr = np.corrcoef(intensity1, intensity2)[0, 1]
print(f"Pearson Correlation Coefficient: {pearson_corr:.4f}")
# 对数据进行分箱处理并取平均值
smoothed1 = [np.mean(intensity1[i:i+step_size]) for i in range(0, len(intensity1), step_size)]
smoothed2 = [np.mean(intensity2[i:i+step_size]) for i in range(0, len(intensity2), step_size)]
# 初始化计数矩阵
scatter = np.zeros((256, 256), dtype=np.int32)
points = np.column_stack((smoothed1, smoothed2))
for val1, val2 in points:
scatter[int(val1), int(val2)] += 1
# 对数变换和归一化
log_scatter = np.log1p(scatter)
normalized_log_scatter = log_scatter / np.max(log_scatter)
# 自定义颜色映射
cmap_colors = [(1, 1, 1), (0, 0, 1), (1, 0, 0), (1, 1, 0.12)]
custom_cmap = LinearSegmentedColormap.from_list('custom_cmap', cmap_colors, N=256)
# 绘制散点图
plt.figure(figsize=(8, 6) if colorbar == 1 else (6, 6))
x, y = np.meshgrid(np.arange(256), np.arange(256))
plt.scatter(x, y, c=normalized_log_scatter.T.flatten(), cmap=custom_cmap, s=40, alpha=0.8, edgecolors='face')
# 绘制拟合线
if fit == 1:
slope, intercept, r_value, p_value, std_err = stats.linregress(smoothed1, smoothed2)
fit_line_eq = slope * np.array(smoothed1) + intercept
plt.plot(smoothed1, fit_line_eq, color='Purple', linewidth=1)
# 添加颜色条
if colorbar == 1:
plt.colorbar(label='Frequency')
# 设置坐标轴标签和范围
plt.xlabel('Pixel Intensity of Pic1')
plt.ylabel('Pixel Intensity of Pic2')
x_percentile = np.percentile(smoothed1, 95)
y_percentile = np.percentile(smoothed2, 95)
new_max = max(x_percentile, y_percentile)
plt.xlim(0, new_max)
plt.ylim(0, new_max)
plt.show()
第三步:调用函数
最后,我们调用这个函数来生成共定位散点图。在这里,我们使用两张图片red.jpg
和green.jpg
。
1
plot_scatter_with_fit('red.jpg', 'green.jpg', step_size=1, fit=1, colorbar=1)
功能概述
读取两张图片,提取第一张图片和第二张图片的通道的亮度值,计算它们之间的相关性。将数据进行分箱处理,绘制散点图,并根据参数决定是否绘制拟合线和显示颜色条。
下面是主要的参数,可以根据需要修改代码中的相关参数实现需要的效果:
pic1
:str,第一张图片的文件路径。
pic2
:str,第二张图片的文件路径。
step_size
:int,分箱处理的步长。
fit
:int,是否绘制拟合线,1表示绘制,0表示不绘制。
colorbar
:int,是否显示颜色条,1表示显示,0表示不显示。
使用方法
1. 准备输入文件
输入文件需要准备两张图像,如本例中我们使用两张图片red.jpg
和green.jpg
分别为细胞的红色和绿色荧光图像:
3. 修改脚本参数
在脚本中设置输入文件路径和绘图参数:
1
plot_scatter_with_fit('red.jpg', 'green.jpg', step_size=1, fit=1, colorbar=1) # 替换为你的输入图像文件路径,设置相关参数
4. 运行脚本
将以上代码保存为一个Python文件,例如Colocalization_scatter_plot.py
,并运行该脚本。脚本运行完成后,会生成一张共定位散点图。如下所示:
通过以上代码,你可以轻松地生成两张图像的共定位散点图,并分析它们的相关性。希望这篇推文能帮助你更好地理解和应用共定位散点图技术。如果你有任何问题或建议,欢迎在评论区留言哦!