我想绘制一个如下图:
数据以.csv文件的形式提供,我已将其导入数据并在图表中用作x。
Y计算如下:
y = np.arange(1, len(data)+1)/len(data)
然后使用:
绘制plt.step((data), y)
plt.show(block="false")
我现在的问题是,图表看起来像this one这样的正常步骤图(不是我的实际数据)。
如何将其格式化为上面提到的格式,即从 y = 0 行的左侧开始,并在 y = 1 的右侧延伸线条,虚线与实线和图表上的点?
我已经google了一下,找到了我已经拥有的图表的许多解决方案,但我想按照提到的格式化。
我是一般主题的新手,所以如果设置错误,那么任何帮助都会受到赞赏!
谢谢!
答案 0 :(得分:0)
我不确定step()
是否能做到这一点;它只是few lines of code缠绕plt.plot()
。
或者,您可以使用vlines()
和hlines()
。切片的逻辑取决于您希望如何配置步骤," (就像你如何指定step()
的{{3}}参数一样,但这里是你问题中例子的近似再现:
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
的创建并不真正跟随您所展示的图像,但此示例会尝试模仿图像本身。