Python 用水平线连接点

Python 用水平线连接点,python,matplotlib,Python,Matplotlib,目标是填充两个数组y1和y2之间的空间,类似于matplotlib。但是我不想用多边形填充空间(例如用hatch=''|'),而是只想在两个数组的数据点之间绘制垂直线 导入matplotlib.pyplot作为plt 将numpy作为np导入 n=10 y1=np.随机。随机(n) y2=np.随机.随机(n)+1 x1=np.arange(n) (x1,y1,y2,facecolor='w',hatch='|')之间的最大填充量 我写了一个小函数,它使用两个数组y1,y2(x1,x2是可选的

目标是填充两个数组
y1
y2
之间的空间,类似于matplotlib。但是我不想用多边形填充空间(例如用
hatch=''|'
),而是只想在两个数组的数据点之间绘制垂直线

导入matplotlib.pyplot作为plt
将numpy作为np导入
n=10
y1=np.随机。随机(n)
y2=np.随机.随机(n)+1
x1=np.arange(n)
(x1,y1,y2,facecolor='w',hatch='|')之间的最大填充量

我写了一个小函数,它使用两个数组
y1
y2
x1
x2
是可选的) 并垂直连接它们的数据点

def在(*,ax,x1=None,x2=None,y1,y2,color\u list=None,**kwargs)之间绘制线:
断言len(y1)=len(y2)
断言isinstance(颜色列表,列表)
n=len(y1)
如果x1为无:
x1=np.arange(n)
如果x2为无:
x2=x1
如果颜色列表为“无”:
颜色列表=[范围(n)内的i无]
elif len(颜色列表)

我写了一个小函数,它使用两个数组
y1
y2
x1
x2
是可选的) 并垂直连接它们的数据点

def在(*,ax,x1=None,x2=None,y1,y2,color\u list=None,**kwargs)之间绘制线:
断言len(y1)=len(y2)
断言isinstance(颜色列表,列表)
n=len(y1)
如果x1为无:
x1=np.arange(n)
如果x2为无:
x2=x1
如果颜色列表为“无”:
颜色列表=[范围(n)内的i无]
elif len(颜色列表)

如果游戏中有很多台词,使用台词收集可能会很方便。与另一个答案类似,但更便宜:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

def draw_lines_between(*, x1=None, x2=None, y1, y2, ax=None, **kwargs):
    ax = ax or plt.gca()
    x1 = x1 if x1 is not None else np.arange(len(y1))
    x2 = x2 if x2 is not None else x1

    cl = LineCollection(np.stack((np.c_[x1, x2], np.c_[y1, y2]), axis=2), **kwargs)
    ax.add_collection(cl)
    return cl

n = 10
y1 = np.random.random(n)
y2 = np.random.random(n) + 1
x = np.arange(n)
color_list = [str(x) for x in np.round(np.linspace(0., 0.8, n), 2)]

fig, ax = plt.subplots()
ax.plot(x, y1, 'r')
ax.plot(x, y2, 'b')
draw_lines_between(ax=ax, x1=x, y1=y1, y2=y2, colors=color_list)

plt.show()

如果游戏中有很多线,那么使用线集合可能很方便。与另一个答案类似,但更便宜:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

def draw_lines_between(*, x1=None, x2=None, y1, y2, ax=None, **kwargs):
    ax = ax or plt.gca()
    x1 = x1 if x1 is not None else np.arange(len(y1))
    x2 = x2 if x2 is not None else x1

    cl = LineCollection(np.stack((np.c_[x1, x2], np.c_[y1, y2]), axis=2), **kwargs)
    ax.add_collection(cl)
    return cl

n = 10
y1 = np.random.random(n)
y2 = np.random.random(n) + 1
x = np.arange(n)
color_list = [str(x) for x in np.round(np.linspace(0., 0.8, n), 2)]

fig, ax = plt.subplots()
ax.plot(x, y1, 'r')
ax.plot(x, y2, 'b')
draw_lines_between(ax=ax, x1=x, y1=y1, y2=y2, colors=color_list)

plt.show()

嗨,我试着用这个来绘制一个类似于上面的图(我使用了plt.scatter),两个点之间画的线从图的顶部一直延伸到图的顶部。我还注意到一些点不是由线连接的。有没有办法只在两点之间画一条线,然后把所有的点连接起来?(图为->)如果需要在其他地方讨论,请让我知道。如果需要,我可以提供相关代码。@EliTurasky您可以使用一个可运行的示例进行编辑,并询问问题。Ping我一旦完成,它就可以重新启动了。我不知道如何提供一个可运行的示例,因为我的代码涉及数据帧和外部数据。不过我可以用我正在使用的数据更新我的问题。嗨,我试着用这个方法绘制了一个与上面类似的图(我使用了plt.scatter),画在两点之间的线从图的顶部一直延伸到图的顶部。我还注意到有些点没有用线连接。有没有办法只在两点之间画一条线,然后把所有的点连接起来?(图为->)如果需要在其他地方讨论,请让我知道。如果需要,我可以提供相关代码。@EliTurasky您可以使用一个可运行的示例进行编辑,并询问问题。Ping我一旦完成,它就可以重新启动了。我不知道如何提供一个可运行的示例,因为我的代码涉及数据帧和外部数据。我可以用我正在使用的数据更新我的问题。