Как получить минимальную (или максимальную) границу рассеянного графика в Matplotlib - PullRequest
0 голосов
/ 10 января 2020

Скажем, у меня есть тысячи случайных (x, y) точек данных, и я храню x s и y s в двух столбцах в кадре данных. Важно отметить, что все x s являются целыми числами, но y s являются непрерывными числами. Если я нанесу их на график рассеяния с помощью Matplotlib, он будет выглядеть ниже. Теперь я хочу получить минимальную границу участка, который я изобразил красной кривой. как мне это сделать? Чтобы было понятно, я хочу получить индексы для (x,y) пар с минимальным значением y для каждого x, поэтому длина индексов должна быть равна len(set(x)).

enter image description here

Ответы [ 2 ]

1 голос
/ 10 января 2020

попробуй:

import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({'A':[1,2,3,1,2,3],'B':[1.3,2.6,3.2,5.6,4.5,3.1]})
fig, ax = plt.subplots()
ax.plot(df.A, df.B, '-')
temp = df.groupby('A')['B'].min().reset_index()
ax.plot(temp.A, temp.B, 'r-')
1 голос
/ 10 января 2020

Является ли df.grouby('x').min() тем, что вы хотите?

Полный пример:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df = pd.DataFrame({'x': np.random.randint(10, size=1000), 'y': np.random.rand(1000)})
df.plot.scatter('x', 'y', color='k')
df.groupby('x').min().plot(ax=plt.gca(), color='red')

Чтобы получить индексы исходного кадра данных, вы можете использовать idxmin на groupby, например,

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