У меня есть одна точка на оси Y и много на оси X, и я хочу сделать прямые линии от этой одной точки Y до каждого X (форма треугольника).

plt.plot([P], [TR], 'k')
plt.xlabel('CENTERLINE')
plt.ylabel('RADIUS')
plt.show()

Где TR - моя единственная точка, объявленная ранее, а P - точки с плавающей запятой (сначала я создаю P = np.zeros((n+1)), а после этого, используя цикл for, я помещаю туда значения).

plt.show() возвращает пустой график (без графика)

Вот пример, как это должно выглядеть

0
macaroni 13 Апр 2019 в 02:56

2 ответа

Лучший ответ

При одновременной обработке множества строк может быть хорошей идеей использовать объект LineCollection:

import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

import numpy as np

pos_fixed = np.array([0, 35])
lines = np.array([[[pos, 0], pos_fixed] for pos in np.arange(0, 50, 2)])
line_coll = LineCollection(lines)

fig, ax = plt.subplots()
ax.add_collection(line_coll)

plt.xlim([0, lines[:,:,0].max()])
plt.ylim([0, lines[:,:,1].max()])

Таким образом, вы можете легче обрабатывать свой сюжет (и это также быстрее, если у вас много линий).

Результат:

enter image description here

2
user8408080 13 Апр 2019 в 00:35

Эти линии не являются непрерывным сюжетом, поэтому вам нужно будет изобразить их отдельно. Вы могли бы сделать это одной строкой, которая идет вверх и вниз (и вверх и вниз, вверх и вниз ...), но я думаю, что это имеет больше смысла как отдельные строки. Рассмотреть возможность:

import matplotlib.pyplot as plt
originpoint = (0, 5)
yfloor = 0
xvalues = [0, 1, 2, 3, 4]
for x in xvalues:
    plt.plot((originpoint[0], x), (originpoint[1], yfloor))
plt.show()

the plot

1
BlivetWidget 13 Апр 2019 в 00:14