在python matplotlib中连接具有相同值的点

Gau*_*ain 6 python numpy matplotlib

我试图绘制一个numpy数组,使得所有具有相同y轴值的点应该在一条直线上连接.但有些我无法实现这一目标.

import numpy as np
import matplotlib as mp
import matplotlib.pyplot as plt

# Declare numpy array with nans
x=np.array([np.nan,10005,10005,10006,10006,10006,10007,10007,10007, 10008,10007,10008,10008,10008, np.nan,10010,10010,10010, np.nan, np.nan, np.nan, np.nan])

# Plot the points
plt.plot(x, marker="o", linestyle='-')

# Display the plot in the window
plt.show()
Run Code Online (Sandbox Code Playgroud)

这导致: 在此输入图像描述

但我希望情节如下:

在此输入图像描述

此外,如果有一种方法可以在图的顶部和底部添加一些边距,以清楚地显示边界点.

Hoo*_*ked 4

循环 y 值的唯一列表(我更改了标签以使事情更清晰)。您还需要一组 x 值,这些值与您的绘图隐式相同,但我们需要位置。

import numpy as np
import matplotlib as mp
import matplotlib.pyplot as plt

# Declare numpy array with nans
y=np.array([np.nan,10005,10005,10006,10006,10006,10007,10007,10007, 10008,10007,10008,10008,10008, np.nan,10010,10010,10010, np.nan, np.nan, np.nan, np.nan])
x=np.arange(y.size)

for yv in np.unique(y):
    if yv != np.nan:
        idx = y == yv
        plt.plot(x[idx],y[idx],marker='o',linestyle='-',color='b')
plt.margins(.1,.1)
plt.show()
Run Code Online (Sandbox Code Playgroud)

使用plt.margins你可以给自己一些与边界相交的图的空间。

在此输入图像描述

  • @IvoFlipse 这_是_天真的解决方案:)。唯一的区别是您使用掩码根据条件创建列表,而不是显式构建它们。 (2认同)