Стандартизуйте ось как несколько графиков, сгенерированных из кадра данных - PullRequest
0 голосов
/ 24 апреля 2020

У меня, казалось бы, простая проблема стандартизации и маркировки моей оси на серии графиков, которые я создаю из DataFrame. Этот фрейм данных содержит столбец с определенным идентификатором, и каждая строка содержит значение для x и значение для y. Я генерирую отдельный график для каждого идентификатора; Тем не менее, я хотел бы стандартную ось на всех этих графиках. Вот мой код:

  groups = data.groupby('Pedigree')
  for Pedigree,group in groups: 
        group.plot(x='EnvironmentalIndex',y='GrainYield',marker='o',linestyle='',color ='white',label=Pedigree)
        plt.plot([0,250],[0,250],linestyle = 'dashed',color='black')
        x = group.EnvironmentalIndex
        y = group.GrainYield
        z = np.polyfit(x,y,1)
        p = np.poly1d(z)
        q = sum(y)/len(y)
        plt.plot(x,p(x),color='green')
        plt.text(25,220,'Stability=%.6f'%(z[0]))
        plt.text(25,205,'Mean Yield=%.6f'%(q))

Я знаю, что в Matplotlib есть функция осей, но я не могу правильно настроить форматирование, чтобы оно хорошо сочеталось с параметром для l oop. Я попытался вставить group.axes () внутри для l oop, но я получаю сообщение об ошибке, что объект списка не вызывается.

1 Ответ

1 голос
/ 24 апреля 2020

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

no_rows = len(data.groupby('Pedigree'))
no_columns = 1
fig, ax = plt.subplots(no_rows, no_columns, sharex = True)
ax = ax.reshape(-1)
count = 0

for Pedigree,group in groups: 
    ...
    q = sum(y)/len(y)
    ax[count].plot(x,p(x),color='green')
    ax[count].text(25,220,'Stability=%.6f'%(z[0]))
    ax[count].text(25,205,'Mean Yield=%.6f'%(q))
    count+=1

Будут применяться только символы из нижнего графика, вы также можете определить другое количество столбцов, но убедитесь, что no_rows * no_columns >= # of plots.

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