Как должен работать вложенный оператор l oop для создания вертикальных линий в операторе for l oop, который создает гистограммы? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь использовать для l oop для создания гистограмм для каждого поля в кадре данных. Кадр данных здесь помечен как 'df4'.

Есть 3 поля / столбца.

Затем я хочу создать вертикальные линии, используя квантили для каждого из столбцов, как определено в следующих сериях: p, exp, eng.

Мой код ниже только успешно создает вертикальные линии на последнее поле / столбец или гистограмма.

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

df4 = pd.read_csv("xyz.csv", index_col = "abc_id" ) 
# dataframe

# x coordinates for the lines
p = df4['abc'].quantile([0.25,0.5,0.75,0.9,0.95])
exp = df4['efg'].quantile([0.25,0.5,0.75,0.9,0.95])
eng = df4['xyz'].quantile([0.25,0.5,0.75,0.9,0.95])

# colors for the lines
colors = ['r','k','b','g','y']

bins = [0,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000]

fig, axs = plt.subplots(len(df4.columns), figsize=(10, 25))
for n, col in enumerate(df4.columns):
    if (n==0):
        for xc,c in zip(exp,colors):
            plt.axvline(x=xc, label='line at x = {}'.format(xc), c=c)
    if (n==1):
        for xc,c in zip(eng,colors):
            plt.axvline(x=xc, label='line at x = {}'.format(xc), c=c) 
    if (n==2):
        for xc,c in zip(p,colors):
            plt.axvline(x=xc, label='line at x = {}'.format(xc), c=c) 
    df[col].hist(ax=axs[n],bins=50)
plt.legend()
plt.show()
...