Python 用交替线绘制离散变步长图的CDF

Python 用交替线绘制离散变步长图的CDF,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我想画一个图表,看起来像: 数据在一个.csv文件中给出,我已经将该文件导入到数据中,并在图中用作x Y的计算公式如下: y = np.arange(1, len(data)+1)/len(data) 然后使用以下公式绘制: plt.step((data), y) plt.show(block="false") 我现在的问题是,这个图看起来像一个普通的步进图(不是我的实际数据) 我如何将其格式设置为所述格式,即从y=0线上的左侧开始,在y=1线上的右侧延伸,虚线与实线以及图表上的点 我在谷

我想画一个图表,看起来像:

数据在一个.csv文件中给出,我已经将该文件导入到数据中,并在图中用作x

Y的计算公式如下:

y = np.arange(1, len(data)+1)/len(data)
然后使用以下公式绘制:

plt.step((data), y)
plt.show(block="false")
我现在的问题是,这个图看起来像一个普通的步进图(不是我的实际数据)

我如何将其格式设置为所述格式,即从y=0线上的左侧开始,在y=1线上的右侧延伸,虚线与实线以及图表上的点

我在谷歌上搜索了一下,找到了很多我已经找到的图表解决方案,但我想按照前面提到的格式来格式化它

我是新来的一般主题,所以如果设置是错误的,任何帮助,也感谢

谢谢

我不确定
step()
是否能做到这一点;它实际上只是一个缠绕的
plt.plot()

或者,您可以使用
vlines()
hlines()
。切片的逻辑根据您希望步骤“配置”的方式而有所不同(如您如何将参数指定为
step()
),但下面是您问题示例的近似再现:

import numpy as np
import matplotlib.pyplot as plt

data = np.arange(0, 7)
y = np.array([.07, .21, .42, .68, 1.])
yn = np.insert(y, 0, 0)

fig, ax = plt.subplots()
ax.set_facecolor('white')

# https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.hlines.html
ax.hlines(y=yn, xmin=data[:-1], xmax=data[1:],
          color='red', zorder=1)

# https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.vlines.html
ax.vlines(x=data[1:-1], ymin=yn[:-1], ymax=yn[1:], color='red',
          linestyle='dashed', zorder=1)

ax.scatter(data[1:-1], y, color='red', s=18, zorder=2)
ax.scatter(data[1:-1], yn[:-1], color='white', s=18, zorder=2,
           edgecolor='red')
ax.grid(False)
ax.set_xlim(data[0], data[-1])
ax.set_ylim([-0.01, 1.01])

zorder
确保分散点覆盖在线条顶部

目前,您创建的
y
与您显示的图像并不完全一致,但本例试图模仿图像本身