Создать график плотности вертикальных линий в Python - PullRequest
1 голос
/ 25 марта 2019

У меня есть куча данных, содержащих координатные интервалы в пределах одной большой области, которые я хочу построить, а затем создать график плотности, показывающий, где в области больше интервальных линий, чем в других.

Как оченьБазовый пример Я только что построил несколько горизонтальных линий для данного интервала.Я не могу найти хороших примеров того, как создать лучший график интервалов.Я заглянул в морское побережье, но я не совсем уверен в этом.Итак, здесь я только что создал базовый пример того, что я пытаюсь сделать.

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 Ответ

1 голос
/ 25 марта 2019

Это, кажется, делает то, что вы хотите:

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, чтобы обрабатывать края по своему усмотрению.

Если ваши фактические данные имеютв другом формате, или если в одном массиве несколько интервалов, вам необходимо настроить это.

...