这种相关性图怎么做?他将三组数据放在一条线上,还将三组的点用不同颜色标识出来?
关注者
1被浏览
3441 个回答
不知道你要用什么语言来生成上面的图,如果是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');
就行