Как я могу получить местоположения x-галочек на гистограмме, созданной в пандах? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть сгруппированная гистограмма, созданная из кадра данных панд. Я хочу установить ось по каждому набору столбцов, но она остановится сразу за границами групп столбцов, поэтому мне нужно найти способ получить список местоположений xtick и ширину наносимых столбцов , так что я могу поместить аргументы xmin и xmax в ось. Если я не могу этого сделать, могу ли я установить метки в функции графика и использовать эти значения?

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

Использование get_xticks мне не очень помогает, так как оно дает мне массив [1,2,3], который не нужен для axhline.

Фрейм данных настроен следующим образом (фрейм данных всегда будет иметь 3 строки, но с переменным числом столбцов):

import matplotlib.pyplot as plt
import pandas as pd

fig, ax = plt.subplots()

df = pd.DataFrame(data=[[1,2,3], [4,5,6], [7,8,9]], index=['type1', 'type2', 'type3'], columns=['group1', 'group2', 'group3'])

df.plot(kind='bar', ax=ax)

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

Заранее спасибо

1 Ответ

1 голос
/ 26 июня 2019

Бары проходят от их центральной позиции на +/- половину от width. Таким образом, группа стержней в позиции 1 с шириной 0.6 простирается от 1-0.6/2 = 0.7 до 1+0.6/2=1.3.

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

fig, ax = plt.subplots()

df = pd.DataFrame(data=[[1,2,3], [4,5,6], [7,8,9]], 
                  index=['type1', 'type2', 'type3'], 
                  columns=['group1', 'group2', 'group3'])

width = 0.6
ax = df.plot(kind='bar', ax=ax, width=width)


mean= df.mean(axis=1)

x = np.arange(len(df.columns))
ax.hlines(mean, x - width/2, x + width/2)

plt.show()

enter image description here

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