Выровняйте доверительные интервалы один под другим - PullRequest
0 голосов
/ 19 апреля 2020

Скажем, у меня есть pandas фрейм данных, в котором представляют интерес 3 столбца: id (текст), min и max (число с плавающей точкой), представляющие нижнюю и верхнюю границы доверительного интервала некоторый параметр (в%), такой как:

id   min   max
 A   3.5   7.8
 B  11.35 13.25
 C   0.0   2.0

Я хотел бы представить эти данные на графике (как показано ниже) с ids, расположенными друг под другом на вертикальной оси, и каждый линия, показывающая изменение доверительного интервала соответствующего id.

enter image description here

И, конечно, мой вопрос: есть ли (довольно ) простой способ сделать это в Python?

Ответы [ 2 ]

0 голосов
/ 19 апреля 2020

Насколько я знаю, нет графика для построения доверительных интервалов, в частности. Однако вы можете использовать matplotlib.pyplot.barh(). Код следующий.

Подготовка фрейма данных:

>>> import pandas as pd
>>> df = pd.DataFrame(
...     {
...         'id': ['A', 'B', 'C'],
...         'min': [3.5, 11.35, 0.0],
...         'max': [7.8, 13.25, 2.0]
...     }
... )
>>> df = df.sort_values(by='id', ascending=False)
>>> print(df)
  id    min    max
2  C   0.00   2.00
1  B  11.35  13.25
0  A   3.50   7.80

Создание диаграммы:

>>> import matplotlib
>>> import matplotlib.pyplot as plt
>>> plt.style.use('seaborn')
>>> 
>>> plt.figure(figsize=(9.5, 2.5))
>>> plt.barh(df['id'], height=0.5, width=df['max']-df['min'], left=df['min'])
>>> plt.title('Chart title')
>>> plt.show()

enter image description here

0 голосов
/ 19 апреля 2020

В python мы можем решить эту проблему, используя библиотеку matplotlib, используя приведенный ниже код.

Также прикрепили выходное изображение для того же.

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


id = ["A","B","C"]
min =[3.5,1.35,0.0]
max =[7.8, 13.25, 2.0]

data = [id,min,max]

df = pd.DataFrame(data)
df = df.T
df.columns=["id","min","max"]


for index, row in df.iterrows():
    m2m = np.linspace( row['min'],row['max'])
    y_val = np.array([row["id"] for _ in range(len(m2m))])
    plt.plot(m2m, y_val )

Выходное изображение

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