下面的代码使用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中的一些东西可以在事后给予我一个所有点的列表。但我还没想好怎么拿到名单
4条答案
按热度按时间wnrlj8wa1#
你不需要知道关于数据的任何事情,你可以通过matplotlib Axes对象来了解数据。
见下图:
以下是精彩部分:
就这样
gupuwyp22#
在一行中:
ax.plot([0,1],[0,1], transform=ax.transAxes)
不需要修改xlim或ylim。
h43kikqp3#
如果将scalex和scaley设置为False,则可以节省一些簿记工作。这是我最近用来覆盖y=x的方法:
或者如果你有一个轴
当然,这不会给予你一个正方形的长宽比。如果你关心这个,就用Paul H的解决方案。
qvsjd97n4#
从matplotlib 3.3开始,使用axline方法可以非常简单地绘制x=y,该方法只需要一个点和一个斜率。
您不需要查看数据就可以使用它,因为您指定的点(即此处的(0,0))实际上不需要在数据或绘图范围内。