如何使用matplotlib或pyqtgraph绘制如下图:

线AB是双向街道,绿色部分表示从A点到B点的方向,红色部分表示B到A,每个部分的宽度表示交通量.宽度以磅为单位测量,不会在不同的缩放级别或dpi设置下更改.
这只是一个例子,事实上我有很多街道.这种情节在许多交通软件中很常见.我尝试使用matplotlib的patheffect,但结果令人沮丧:
from matplotlib import pyplot as plt
import matplotlib.patheffects as path_effects
x=[0,1,2,3]
y=[1,0,0,-1]
ab_width=20
ba_width=30
fig, axes= plt.subplots(1,1)
center_line, = axes.plot(x,y,color='k',linewidth=2)
center_line.set_path_effects(
[path_effects.SimpleLineShadow(offset=(0, -ab_width/2),shadow_color='g', alpha=1, linewidth=ab_width),
path_effects.SimpleLineShadow(offset=(0, ba_width/2), shadow_color='r', alpha=1, linewidth=ba_width),
path_effects.SimpleLineShadow(offset=(0, -ab_width), shadow_color='k', alpha=1, linewidth=2),
path_effects.SimpleLineShadow(offset=(0, ba_width), shadow_color='k', alpha=1, linewidth=2),
path_effects.Normal()])
axes.set_xlim(-1,4)
axes.set_ylim(-1.5,1.5)
Run Code Online (Sandbox Code Playgroud)
我想到的一个想法是将线的每个部分作为独立线,并在更改缩放级别时重新计算它的位置,但它太复杂和缓慢.
如果有任何简单的方法使用matplotlib或pyqtgraph绘制我想要的东西?任何建议将不胜感激!
在迭代算法中,多次使用大型 numpy 数组是很常见的。我想将值填充到现有的大 numpy 数组中,但我发现创建一个新数组甚至更快。
\n\n>>>import numpy as np\n>>>a=np.arange(10000)\n>>>b=a.copy()\n>>>%timeit b=a+a # Every time create a new array\n100000 loops, best of 3: 9.59 \xc2\xb5s per loop\n>>>%timeit b[:]=a+a # Use existing array\n100000 loops, best of 3: 13.3 \xc2\xb5s per loop\n>>>%timeit np.copyto(b,a+a) # Another way to use existing array\n100000 loops, best of 3: 13.4 \xc2\xb5s per loop\nRun Code Online (Sandbox Code Playgroud)\n\nb上面)我不想在使用时测试钥匙的类型__setitem__.但奇怪的是,当使用多个密钥时,我发现某些代码被省略了.这是我的测试类:
class foo():
def __init__(self):
self.data=[[1,2],[3,4],[5,6]]
def __getitem__(self, key):
return self.data[key]
def __setitem__(self, key, value):
print('Key is {0}, type of key is {1}'.format(key,type(key)))
self.data[key] = value
f = foo()
Run Code Online (Sandbox Code Playgroud)
使用一把钥匙就可以了:
>>>f[1] = [0,0]
Key is 1, type of key is <class 'int'>
>>>f[1]
[0, 0]
Run Code Online (Sandbox Code Playgroud)
当使用两个键时,结果是正确的,但为什么没有打印出来
>>>f[1][1] = 100
>>>f[1][1]
100
Run Code Online (Sandbox Code Playgroud)
我是python的新手,任何建议都会赞赏!