使用python的matplotlib为散点图添加线条

时间:2016-11-09 21:54:25

标签: python matplotlib

我正在使用python' matplotlib并希望创建一个带有额外行的matplotlib.scatter()。该行应从左下角到右上角,与散点内容无关。 数据的线性回归,如this post,并不是我想要的。它也应该动态地独立于分散输入。

这应该是最终的情节:

enter image description here

修改

这样做了我的结果:

# Scatter Plot
x = data_calc_hourly.temp
y =  data_obs_hourly.temp

lineStart = data_calc_hourly.temp.min() 
lineEnd = data_calc_hourly.temp.max()  

plt.figure()
plt.scatter(x, y, color = 'k', alpha=0.5)
plt.plot([lineStart, lineEnd], [lineStart, lineEnd], 'k-', color = 'r')
plt.xlim(lineStart, lineEnd)
plt.ylim(lineStart, lineEnd)
plt.show()

还有更好的方法吗?

3 个答案:

答案 0 :(得分:9)

这会绘制一条对角线,该对角线与散点图数据无关,即使调整窗口大小,也会保持与轴的对齐:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
import matplotlib.transforms as mtransforms

x, y = np.random.random((2, 100))*2
fig, ax = plt.subplots()
ax.scatter(x, y, c='black')
line = mlines.Line2D([0, 1], [0, 1], color='red')
transform = ax.transAxes
line.set_transform(transform)
ax.add_line(line)
plt.show()

enter image description here

答案 1 :(得分:0)

除unutbu的答案外,另一个选择是在绘制数据后获取轴的限制并使用它们来添加线。此后,您仍然需要改回轴限制,因为它们会随着线的增加而改变:

# Scatter Plot
x = data_calc_hourly.temp
y =  data_obs_hourly.temp

lineStart = data_calc_hourly.temp.min() 
lineEnd = data_calc_hourly.temp.max()  

plt.figure()
plt.scatter(x, y, color = 'k', alpha=0.5)
y_lim = plt.ylim()
x_lim = plt.xlim()
plt.plot(x_lim, y_lim, 'k-', color = 'r')
plt.ylim(y_lim)
plt.xlim(x_lim)
plt.show()

答案 2 :(得分:0)

我尝试更新 X 轴和 Y 轴具有不同最大值和最小值数据的情况下的最小值和最大值限制。

x = data_calc_hourly.temp
y =  data_obs_hourly.temp

calc_min = data_calc_hourly.temp.min()
calc_max = data_calc_hourly.temp.max()

obs_min = data_obs_hourly.temp.min()
obs_max = data_obs_hourly.temp.max()

lineStart = min(calc_min,obs_min)
lineEnd = max(calc_max,obs_max)

plt.figure()
plt.scatter(x, y, color = 'k', alpha=0.5)
plt.plot([lineStart, lineEnd], [lineStart, lineEnd], color = 'r')
plt.xlim(lineStart, lineEnd)
plt.ylim(lineStart, lineEnd)
plt.show()