Общее решение для блочной диаграммы для всего фрейма данных, которое должно работать как для seaborn
, так и для pandas
, поскольку все они matplotlib
находятся под капотом, я буду использовать график pandas
в качестве примера, предполагая, что import matplotlib.pyplot as plt
уже на месте. Поскольку у вас уже есть ax
, было бы разумнее просто использовать ax.text(...)
вместо plt.text(...)
.
In [35]:
print df
V1 V2 V3 V4 V5
0 0.895739 0.850580 0.307908 0.917853 0.047017
1 0.931968 0.284934 0.335696 0.153758 0.898149
2 0.405657 0.472525 0.958116 0.859716 0.067340
3 0.843003 0.224331 0.301219 0.000170 0.229840
4 0.634489 0.905062 0.857495 0.246697 0.983037
5 0.573692 0.951600 0.023633 0.292816 0.243963
[6 rows x 5 columns]
In [34]:
df.boxplot()
for x, y, s in zip(np.repeat(np.arange(df.shape[1])+1, df.shape[0]),
df.values.ravel(), df.values.astype('|S5').ravel()):
plt.text(x,y,s,ha='center',va='center')
![введите описание изображения здесь](https://i.stack.imgur.com/UseTN.png)
Для одной серии в фрейме данных необходимо внести несколько небольших изменений:
In [35]:
sub_df=df.V1
pd.DataFrame(sub_df).boxplot()
for x, y, s in zip(np.repeat(1, df.shape[0]),
sub_df.ravel(), sub_df.values.astype('|S5').ravel()):
plt.text(x,y,s,ha='center',va='center')
![введите описание изображения здесь](https://i.stack.imgur.com/d6TA8.png)
Создание точечных диаграмм также аналогично:
#for the whole thing
df.boxplot()
plt.scatter(np.repeat(np.arange(df.shape[1])+1, df.shape[0]), df.values.ravel(), marker='+', alpha=0.5)
#for just one column
sub_df=df.V1
pd.DataFrame(sub_df).boxplot()
plt.scatter(np.repeat(1, df.shape[0]), sub_df.ravel(), marker='+', alpha=0.5)
![введите описание изображения здесь](https://i.stack.imgur.com/fltVW.png)
![введите описание изображения здесь](https://i.stack.imgur.com/wEw0g.png )
Чтобы наложить материал на boxplot
, нам нужно сначала угадать, где каждый прямоугольник расположен среди xaxis
. Похоже, они находятся на 1,2,3,4,....
. Поэтому для значений в первом столбце мы хотим, чтобы они отображались на графике при x = 1; 2-й столбец при x = 2 и так далее.
Любой эффективный способ сделать это - использовать np.repeat
, повторять 1,2,3,4...
, каждое n
раз, где n
- количество наблюдений. Затем мы можем построить график, используя эти числа как x
координаты. Поскольку он одномерный, для координат y
нам понадобится плоское представление данных, предоставленное df.ravel()
Для наложения текстовых строк нам понадобится еще один шаг (цикл). Поскольку мы можем отображать только одно значение x, одно значение y и одну текстовую строку за раз.
person
CT Zhu
schedule
12.04.2014