在python(matplotlib)中从不同的图形连接2个点

2024-05-13 22:03:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着画一个像下面这样的图,想把这些点用直线连接起来。但是,正如您所见,有些点(X轴上0.04以上)部分重叠,这不允许我们表示它们之间的连接。fig 1.

我想做的是,做两个独立的图,其中一个图的所有点都在0.04以上(这样它将被放大并且这些点将被分开),而另一个只有一个点在左上角。fig 2.

注意,点的大小也包含一些含义。所以,我不能使点的大小变小或变大。(除非所有点的变化是一致的)

这样做的好方法是什么?matplotlib中是否有提供这种特性的函数?或者,除了matplotlib之外,还有其他python库可以用更好的方式来完成这个任务吗?在


Tags: 方法函数matplotlib方式特性直线含义点将
1条回答
网友
1楼 · 发布于 2024-05-13 22:03:43

编辑基于this帖子,一个比我上一个更好的解决方案可能是:

import matplotlib.pylab as pl
import matplotlib
import numpy as np

pl.close('all')

x = np.linspace(0.019, 0.021, 4)
y = np.linspace(0.09,  0.10,  4)
s = np.random.randint(10, 200, 4)

fig = pl.figure()

ax1=pl.subplot(121)
pl.scatter(x, y, s=s)
pl.xlim(0.01, 0.04)
pl.ylim(0.04, 0.12)
pl.xticks([0.01,0.02,0.03,0.04])
pl.yticks([0.04,0.06,0.08,0.10,0.12])

ax2=pl.subplot(122)
pl.scatter(x, y, s=s)
pl.xlim(0.018, 0.022)
pl.ylim(0.08, 0.11)
pl.xticks([0.018,0.020,0.022])
pl.yticks([0.08,0.095,0.11])

transFigure = fig.transFigure.inverted()
for i in range(x.size):
    xy1 = transFigure.transform(ax1.transData.transform([x[i],y[i]]))
    xy2 = transFigure.transform(ax2.transData.transform([x[i],y[i]]))

    line = matplotlib.lines.Line2D((xy1[0],xy2[0]),(xy1[1],xy2[1]),
                                   transform=fig.transFigure)
    fig.lines.append(line)

enter image description here


另一个(旧)解决方案:

有趣的问题。我想出了下面的“解决方案”(尽管它不漂亮…);它从数据坐标到图形坐标执行ax.transData.transform,并使用ax.annote绘制箭头,但不幸的是,只有保持图形dpi(每英寸点数)等于图形ppi(每英寸点数),这个解决方案才有效。在

如果我能想出更好的解决办法,我就把它贴在这里。在

^{pr2}$

enter image description here

相关问题 更多 >