作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何使用 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)
我想到的一个想法是将线的每一部分作为独立的线,并在更改缩放级别时重新计算它的位置,但它太复杂且太慢。
是否有任何简单的方法可以使用 matplotlib 或 pyqtgraph 绘制我想要的东西?任何建议将不胜感激!
最佳答案
如果你可以有每条独立的线,这可以用 fill_between
轻松完成功能。
from matplotlib import pyplot as plt
import numpy as np
x=np.array([0,1,2,3])
y=np.array([1,0,0,-1])
y1width=-1
y2width=3
y1 = y + y1width
y2 = y + y2width
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x,y, 'k', x,y1, 'k',x,y2, 'k',linewidth=2)
ax.fill_between(x, y1, y, color='g')
ax.fill_between(x, y2, y, color='r')
plt.xlim(-1,4)
plt.ylim(-3,6)
plt.show()
在这里,我将中心线视为引用(因此为负 y1width
),但可以采用不同的方式。结果是:
如果线条“复杂”,最终在某个点相交,则关键字参数 interpolate=True
必须用于正确填充交叉区域。另一个可能对您的用例有用的有趣参数是 where
, 以调节区域,例如 where=y1 < 0
.有关更多信息,您可以查看 documentation .
关于python - 如何在matplotlib中绘制 "two directions widths line",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37740160/
我是一名优秀的程序员,十分优秀!