有没有一种简单的方法可以使用matplotlib / numpy对许多变量进行累积绘图?
我正在考虑这样的图http://atlassian.wpengine.netdna-cdn.com/jira/cumulative-flow-diagram.png。
例如,我有数据a = [0,3,6],b = [0,3,4],这应该成为一个计数图 [(0,a = 1,b = 1),(3,a = 2,b = 2),(4,a = 2,b = 3),(6,a = 3,b = 3)]。因此,没有分箱,而是所有x值都得到一个点,其中特定变量的计数低于此值。 a和b值应叠加在一起。
我可以想象如何使用bisect实现复杂的隔行扫描预处理,但我看不到一个简单的解决方案。
有什么建议吗?
编辑:累积计数的另一种解释: 我有多个x值的数据行。例如。 a = [0,3,6],b = [0,3,4],c = [1,7]
我需要每个数据行的图表。绘图的x坐标的可能值是所有数据行值的并集。这里[0,1,3,4,6,7]。
对于这些总x值中的每一个,特定行的y值将是该数据中的多少值低于x坐标。因此,对于x坐标x = [0,1,3,4,6,7],我得到ya = [1,1,2,2,3,3],yb = [1,1,2,3 ,3,3],yc = [0,1,1,1,1,2]。 当然我会使用叠加图:)
答案 0 :(得分:2)
您在链接中提到的地图类型可以通过stackplot
来实现。请参阅例如图库的示例:http://matplotlib.org/examples/pylab_examples/stackplot_demo.html
您对示例数据的意思并非完全清楚。您能否举例说明您拥有的数据以及您想要获得的数据?
编辑:一种非常简单的方法:
>>> a=[0,3,6]
>>> b=[0,3,4]
>>> c=[1, 7]
>>>
>>> x = [0,1,3,4,6,7]
>>>
>>> ya = []
>>>
>>> val = 0
>>> for i in x:
... if i in a:
... val += 1
... ya.append(val)
... else:
... ya.append(val)
...
>>> ya
[1, 1, 2, 2, 3, 3]
但可能会有更有效的方法。你使用numpy或pandas进行分析吗?或者使用普通列表?