在python

时间:2019-03-25 11:52:08

标签: python matplotlib density-plot horizontal-line

我要在一个大区域中包含一堆包含坐标间隔的数据,然后绘制该密度图,然后创建一个密度图,以显示该区域中的间隔线比其他区域多。

作为一个非常基本的示例,我只是绘制了给定间隔的一些水平线。我真的找不到如何创建更好的间隔图的任何好例子。我已经调查过Seaborn,但我对此并不完全确定。所以在这里,我刚刚创建了一个我想做的基本示例。

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(1, 30,100)
x2 = np.linspace(10,40,100)
x3 = np.linspace(2,50,100)
x4 = np.linspace(40,60,100)
x5 = np.linspace(30,78,100)
x6 = np.linspace(82,99,100)
x7 = np.linspace(66,85,100)
x = [x1,x2,x3,x4,x5,x6,x7]
y = np.linspace(1,len(x),len(x))
fig, ax = plt.subplots()
for i in range(len(x)):
    ax.hlines(y[i], xmin=x[i][0], xmax=x[i][-1], linewidth=1)
plt.xlim(-5,105)
plt.show()

enter image description here

然后我想创建一个间隔重叠的密度图。有人对如何进行此操作有任何建议吗?

感谢您的帮助和建议

1 个答案:

答案 0 :(得分:1)

这似乎可以满足您的要求:

def count(xi):
    samples = np.linspace(0, 100, 101)
    return (xi[0] < samples) & (samples <= xi[-1])

is_in_range = np.apply_along_axis(count, arr=x, axis=1)
density = np.sum(is_in_range, axis=0)

通常的想法是产生一些输出linspace,然后检查这些坐标是否在数组x的范围内-这就是函数count的作用。然后apply_along_axis在数组x的每一行(即每个一维数组)上运行此函数。

这就是我绘制density时得到的结果:

The result of the density counting

您可能需要调整<=函数中的<count标记,以根据需要处理边缘。

如果实际数据的格式不同,或者一个数组中有多个间隔,则需要进行调整。