kuz*_*roo 16 python plot matplotlib scatter-plot
这里有一些代码使用matplotlib散布了许多不同系列的图,然后添加了行y = x:
import numpy as np, matplotlib.pyplot as plt, matplotlib.cm as cm, pylab
nseries = 10
colors = cm.rainbow(np.linspace(0, 1, nseries))
all_x = []
all_y = []
for i in range(nseries):
    x = np.random.random(12)+i/10.0
    y = np.random.random(12)+i/5.0
    plt.scatter(x, y, color=colors[i])
    all_x.extend(x)
    all_y.extend(y)
# Could I somehow do the next part (add identity_line) if I haven't been keeping track of all the x and y values I've seen?
identity_line = np.linspace(max(min(all_x), min(all_y)),
                            min(max(all_x), max(all_y)))
plt.plot(identity_line, identity_line, color="black", linestyle="dashed", linewidth=3.0)
plt.show()
为了实现这一点,我必须跟踪散点图中的所有x和y值,以便知道identity_line应该从哪里开始和结束.即使我没有列出我绘制的所有点的列表,有没有办法让y = x出现?我认为matplotlib中的某些东西可以给我一个事后的所有点的列表,但我还没有弄清楚如何获得该列表.
Pau*_*l H 40
你不需要知道你的数据进行任何本身.您可以使用matplotlib Axes对象告诉您有关数据的内容.
见下文:
import numpy as np
import matplotlib.pyplot as plt
# random data 
N = 37
x = np.random.normal(loc=3.5, scale=1.25, size=N)
y = np.random.normal(loc=3.4, scale=1.5, size=N)
c = x**2 + y**2
# now sort it just to make it look like it's related
x.sort()
y.sort()
fig, ax = plt.subplots()
ax.scatter(x, y, s=25, c=c, cmap=plt.cm.coolwarm, zorder=10)
lims = [
    np.min([ax.get_xlim(), ax.get_ylim()]),  # min of both axes
    np.max([ax.get_xlim(), ax.get_ylim()]),  # max of both axes
]
# now plot both limits against eachother
ax.plot(lims, lims, 'k-', alpha=0.75, zorder=0)
ax.set_aspect('equal')
ax.set_xlim(lims)
ax.set_ylim(lims)
fig.savefig('/Users/paul/Desktop/so.png', dpi=300)

小智 26
从 matplotlib 3.3 开始,使用 axline 方法使这变得非常简单,只需要一个点和一个斜率。绘制 x=y 的图:
ax.axline((0, 0), slope=1)
您无需查看数据即可使用此功能,因为您指定的点(即此处的 (0,0))实际上不需要位于您的数据或绘图范围内。
小智 6
如果将 scalex 和 scaley 设置为 False,则可以节省一些簿记。这是我最近用来叠加 y=x 的方法:
xpoints = ypoints = plt.xlim()
plt.plot(xpoints, ypoints, linestyle='--', color='k', lw=3, scalex=False, scaley=False)
或者如果你有一个轴:
xpoints = ypoints = ax.get_xlim()
ax.plot(xpoints, ypoints, linestyle='--', color='k', lw=3, scalex=False, scaley=False)
当然,这不会给你一个方形的纵横比。如果您关心这个,请使用 Paul H 的解决方案。