快速绘制共定位散点图:一分钟搞定细胞内信号分布分析!

学术   2024-08-09 08:02   日本  

引言

共定位散点图是一种可视化技术,用于展示两种不同信号在图像中的空间相关性。它通过将两个图像的像素强度值绘制在散点图上,帮助我们理解这些信号是否在相同的空间区域出现,以及它们的相关性强度。这在生物医学领域特别有用,比如研究抗癌药物对细胞内蛋白质分布的影响,或者分析不同荧光标记的分子在细胞中的共定位情况。

本期内容小编为大家分享快速使用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.jpggreen.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.jpggreen.jpg分别为细胞的红色和绿色荧光图像:

3. 修改脚本参数

在脚本中设置输入文件路径和绘图参数:

  • 1

plot_scatter_with_fit('red.jpg', 'green.jpg', step_size=1, fit=1, colorbar=1)  # 替换为你的输入图像文件路径,设置相关参数

4. 运行脚本

将以上代码保存为一个Python文件,例如Colocalization_scatter_plot.py,并运行该脚本。脚本运行完成后,会生成一张共定位散点图。如下所示:

通过以上代码,你可以轻松地生成两张图像的共定位散点图,并分析它们的相关性。希望这篇推文能帮助你更好地理解和应用共定位散点图技术。如果你有任何问题或建议,欢迎在评论区留言哦!

如果您喜欢我们的文章,欢迎关注
更多科研干货点击👇,输入关键词搜索🔍

叮当学术
📚零零碎碎的科研学习记录~🔬科研本沉闷,但跑起来有风。
 最新文章