Сегменты линий в Matplotlib - PullRequest
       15

Сегменты линий в Matplotlib

3 голосов
/ 24 февраля 2012

Учитывая координаты [1,5,7,3,5,10,3,6,8] для matplotlib.pyplot, как мне выделить или покрасить различные сегменты линии. Например, координаты 1-3 ([1,5,7,3]) в списке представляют атрибут a. Как мне раскрасить этот бит линии и отметить его в легенде?

Редактировать: рассматриваемый список содержит десятки тысяч элементов. Я пытаюсь выделить конкретные разделы списка. Исходя из полученных ответов, верно ли предположить, что я должен нарисовать каждый сегмент по одному? Нельзя сказать «выбрать отрезок линии от координаты x1 до координаты x2, изменить цвет линии»

Ответы [ 2 ]

6 голосов
/ 24 февраля 2012

Примерьте размер:

from matplotlib import pyplot as plt
y1 = [1,5,7,3]
x1 = range(1,5)
y2 = [3,5,10,3,6,8]
x2 = range(4,len(y2)+4)
plt.plot(x1, y1, 'go-', label='line 1', linewidth=2)
plt.plot(x2, y2, 'rs--',  label='line 2')
plt.legend()
plt.show()

Даст вам:

enter image description here

Кроме того, вы должны также посмотреть на помощь, это довольно полезно. : -)

2 голосов
/ 24 февраля 2012

Да, вам нужно перерисовать линию, но вы можете обрезать строку так, чтобы видна была только та часть, которая вас интересует.Для этого я создаю прямоугольник, покрывающий область, которая представляет prop (a), а затем использую это для создания clip_path.

import matplotlib.pyplot as plt
from matplotlib.transforms import Bbox

data = [1,5,7,3,5,10,3,6,8]
X0 = 1
X1 = 3

plt.plot(data, label='full results')
# make a rectangle that will be used to crop out everything not prop (a)
# make sure to use data 'units', so set the transform to transData
propArect = plt.Rectangle((X0, min(data)), X1, max(data), 
                          transform=plt.gca().transData)
# save the line so when can set the clip
line, = plt.plot(data,
         color='yellow',
         linewidth=8,
         alpha=0.5,
         label='Prop (a)',
         )
line.set_clip_path(propArect)

handles, labels = plt.gca().get_legend_handles_labels()
plt.legend(handles, labels)
plt.savefig('highlight.png')
plt.show()

Это приводит к: enter image description here

При построении сегмента линии я корректировал прозрачность с помощью ключевого слова alpha, которое варьируется от 0 до 1 или прозрачногов твердое телоЯ также сделал это более толстой линией, выходящей за рамки первоначальных результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...