这种相关性图怎么做?他将三组数据放在一条线上,还将三组的点用不同颜色标识出来?

[图片]
关注者
1
被浏览
344

1 个回答

不知道你要用什么语言来生成上面的图,如果是python,你可以这样写:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import linregress

np.random.seed(42) 
num_points = 50
SI_ratio = np.linspace(0, 3, num_points)

noise = np.random.normal(0, 0.2, num_points)
Ctrl = 4 - SI_ratio + noise

noise = np.random.normal(0, 0.2, num_points)
Sus = 3.8 - 0.8 * SI_ratio + noise

noise = np.random.normal(0, 0.2, num_points)
Res = 3.6 - 1.2 * SI_ratio + noise

plt.scatter(SI_ratio, Ctrl, color='red', label='Ctrl')
plt.scatter(SI_ratio, Sus, color='gray', label='Sus')
plt.scatter(SI_ratio, Res, color='blue', label='Res')

slope, intercept, r_value, p_value, _ = linregress(SI_ratio, Ctrl)
plt.plot(SI_ratio, slope*SI_ratio + intercept, color='black', linestyle='--')

plt.title("Relative O-GlcNAc protein levels vs. SI ratio")
plt.xlabel("SI ratio")
plt.ylabel("Relative O-GlcNAc protein levels")
plt.legend()
plt.grid(True)

plt.show()

生成的图片是这样的:

如果用matlab可以这样写:

rng(42);

num_points = 50;
SI_ratio = linspace(0, 3, num_points);

noise = randn(1, num_points) * 0.2;
Ctrl = 4 - SI_ratio + noise;

noise = randn(1, num_points) * 0.2;
Sus = 3.8 - 0.8 * SI_ratio + noise;

noise = randn(1, num_points) * 0.2;
Res = 3.6 - 1.2 * SI_ratio + noise;

figure;
scatter(SI_ratio, Ctrl, 36, 'red', 'filled');
hold on;
scatter(SI_ratio, Sus, 36, [0.5 0.5 0.5], 'filled');
scatter(SI_ratio, Res, 36, 'blue', 'filled');

coeffs = polyfit(SI_ratio, Ctrl, 1);
fit_line = polyval(coeffs, SI_ratio);
plot(SI_ratio, fit_line, 'k--');

title('Relative O-GlcNAc protein levels vs. SI ratio');
xlabel('SI ratio');
ylabel('Relative O-GlcNAc protein levels');
legend('Ctrl', 'Sus', 'Res', 'Fit line');
grid on;

hold off;

结果是这样的:

背景也可以修改成你图里面的渐变色:

加入代码:

x = [min(SI_ratio), max(SI_ratio), max(SI_ratio), min(SI_ratio)];
y = [min([Ctrl Sus Res]), min([Ctrl Sus Res]), max([Ctrl Sus Res]), max([Ctrl Sus Res])];
c = [1 1 0.9; 0.9 0.9 1; 0.9 0.9 1; 1 1 0.9];  
patch(x, y, [1 1 1 1], 'FaceVertexCData', c, 'FaceColor', 'interp', 'EdgeColor', 'none');

就行