我想在一个子图中绘制阻尼随机游走的时间序列,然后在第二个子图中放大它。我mark_inset
从matplotlib知道,效果很好。到目前为止,我的代码是:
from mpl_toolkits.axes_grid1.inset_locator import mark_inset
from astroML.time_series import generate_damped_RW
fig = plt.figure()
ax = fig.add_subplot(111)
ax0 = fig.add_subplot(211)
ax1 = fig.add_subplot(212)
ax.set_ylabel('Brightness[mag]')
ax.yaxis.labelpad=30
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['right'].set_color('none')
ax.tick_params(labelcolor='w', top='off', bottom='off', left='off',
right='off')
t = np.linspace(0, 5000, 100000)
data = generate_damped_RW(t, tau=100, xmean=20, z=0, SFinf=0.3,
random_state=1)
ax0.scatter(t, data, s=0.5)
ax0.text(1, 1, r'$E(m) = %.2f, \sigma(m) = %.2f$'%(np.mean(data),
np.std(data)),
verticalalignment='top', horizontalalignment='right',
transform=ax0.transAxes, fontsize=23)
mask = (t > 370) & (t < 470)
ax1.set_xlabel('Time[years]')
ax1.scatter(t[mask], data[mask], s=0.5)
mark_inset(ax0, ax1, loc1=2, loc=1, fc='none')
这将创建如下图:
这几乎是我想要的,除了连接2个子图的线从第一个子图中的框的上边缘开始。是否有可能从第二个子图中的较低的两个边缘开始,而仍然在第二个子图中的较高的两个边缘处结束呢?我要怎么做才能做到这一点?
在mark_inset
有两个参数loc1
,并loc2
设置两个连接器的位置。这样,盒子和插入轴的位置相同。
但是,我们可以在mark_inset
函数中添加两个新参数,以为连接器的开始和结束设置不同的位置。
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import TransformedBbox, BboxPatch, BboxConnector
import numpy as np
fig, (ax, axins) = plt.subplots(nrows=2)
x = np.linspace(0,6*np.pi)
y = np.sin(x)
ax.plot(x,y)
axins.plot(x,y)
axins.set_xlim((2*np.pi, 2.5*np.pi))
axins.set_ylim((0, 1))
# draw a bbox of the region of the inset axes in the parent axes and
# connecting lines between the bbox and the inset axes area
# loc1, loc2 : {1, 2, 3, 4}
def mark_inset(parent_axes, inset_axes, loc1a=1, loc1b=1, loc2a=2, loc2b=2, **kwargs):
rect = TransformedBbox(inset_axes.viewLim, parent_axes.transData)
pp = BboxPatch(rect, fill=False, **kwargs)
parent_axes.add_patch(pp)
p1 = BboxConnector(inset_axes.bbox, rect, loc1=loc1a, loc2=loc1b, **kwargs)
inset_axes.add_patch(p1)
p1.set_clip_on(False)
p2 = BboxConnector(inset_axes.bbox, rect, loc1=loc2a, loc2=loc2b, **kwargs)
inset_axes.add_patch(p2)
p2.set_clip_on(False)
return pp, p1, p2
mark_inset(ax, axins, loc1a=1, loc1b=4, loc2a=2, loc2b=3, fc="none", ec="crimson")
plt.draw()
plt.show()
这是我的测试照片 我正在努力寻找卡片的边缘。但是,正如您所看到的,边缘有些模糊。 在这里找到一些建议:模糊边缘检测如何从python中的模糊图像中找到扭曲矩形的精确角点位置?,但没有一个能产生令人满意的边缘。 完整代码:
我在我的供应链模型中有两种类型的边缘:demand_links和supply_links。所有链接的默认颜色是灰色。但是我想在每次更改demand_link的属性时将demand_links的颜色更改为红色(注意:边缘是通过边缘创建者自定义边缘代理)。如何做到这一点? 下面是我的简单测试代码,但它不起作用。 初始化时我收到错误。
问题内容: 我想在两个不同的子图中绘制数据。绘制后,我想回到第一个子图并在其中绘制另一个数据集。但是,这样做时会收到以下警告: MatplotlibDeprecationWarning:当前使用与以前的轴相同的参数添加轴现在会重用之前的实例。在将来的版本中,将始终创建并返回一个新实例。同时,通过向每个轴实例传递唯一的标签,可以抑制此警告,并确保将来的行为。warnings.warn(消息,mplD
我的假设是,如果处理器对两个边都有传入项,并且其中一个tryProcess()返回false,那么将处理另一个边(如果在这样的边上有更多的传入项)。根据哪个边缘停止处理和哪个边缘接受它们来交替传入项。 有时会发生一个处理器实例阻塞tryProcess(#0),它总是返回false(因为我们希望处理来自其他edge的新项)。tryProcess(#0)被重新调用,而tryProcess(#1)从不被
TBD 参考 The Birth of an Edge Orchestrator – Cloudify Meets Edge Computing K8s(Kubernetes) and SDN for Multi-access Edge Computing deployment
我正在azure中使用cosmos图形数据库。 有人知道是否有一种方法可以在两个顶点之间添加一条边,只有当它不存在时(使用gremlin图查询)? 我可以在添加顶点时这样做,但不能使用边。我从这里获取了执行此操作的代码: 谢谢