在 python 中创建垂直线的密度图
Create a density plot of vertical lines in python
我有一堆数据包含一个大区域内的坐标间隔,我想绘制这些数据,然后创建一个密度图,显示该区域中哪些间隔线比其他区域多。
作为一个非常基本的示例,我刚刚绘制了给定间隔的一些水平线。我真的找不到任何关于如何创建更好的间隔图的好例子。我调查过 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()
然后我想创建一个重叠间隔数的密度图。任何人都可以就如何进行此操作提出任何建议吗?
感谢您的帮助和建议
这似乎是你想要的:
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
时得到的结果:
您可能需要调整 count
函数中的 <=
和 <
符号以根据需要处理边缘。
如果您的实际数据有不同的格式,或者如果一个数组中有多个间隔,您将需要进行调整。
我有一堆数据包含一个大区域内的坐标间隔,我想绘制这些数据,然后创建一个密度图,显示该区域中哪些间隔线比其他区域多。
作为一个非常基本的示例,我刚刚绘制了给定间隔的一些水平线。我真的找不到任何关于如何创建更好的间隔图的好例子。我调查过 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()
然后我想创建一个重叠间隔数的密度图。任何人都可以就如何进行此操作提出任何建议吗?
感谢您的帮助和建议
这似乎是你想要的:
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
时得到的结果:
您可能需要调整 count
函数中的 <=
和 <
符号以根据需要处理边缘。
如果您的实际数据有不同的格式,或者如果一个数组中有多个间隔,您将需要进行调整。