Построение pandas df с 2 индексами, давая каждому индексу собственную ось X - PullRequest
0 голосов
/ 03 марта 2020

Извините, если об этом уже спрашивали, но я еще не видел ничего подобного.

У меня есть df с двумя индексами: энергия и длина волны (см. Ниже). Я хочу построить график этих данных с энергией в качестве первичной оси X (внизу) и длиной волны в качестве вторичной оси X (вверху). См. Образец кадра данных ниже.

Sample of DF

Вот что я пробовал до сих пор:

def overlay_plot(dataframe, filename):
    sns.set(font_scale=font_scale, font=font_style, style='darkgrid')
    sns.set_context('paper')
    sns.set_style('whitegrid')
    fig, ax1 = plt.subplots(figsize=(fig_width, fig_height))
    ax2 = ax1.twiny()
    ax1.tick_params(left=True, bottom=True)
    ax1.minorticks_on()
    ax1.set_xticklabels(ax1.get_xticks(), rotation=270)
    ax1.xaxis.set_major_locator(ticker.MultipleLocator(.0005))
    ax1.yaxis.set_major_locator(ticker.MultipleLocator(5000))
    ax1.grid(which='minor', linestyle=':', linewidth=0.3, color='grey')
    ax1.grid(which='major', linestyle='-', linewidth=0.5, color='grey')
    ax2.set_xlabel('Wavelength (nm)')
    result = re.search('PSeries_(.*)AllSpectra.csv', filename)
    plt.title(title_text + result.group(1).replace('_', ' ').replace('p', '.'), fontsize=title_size)
    dataframe.plot(ax=ax1).legend(bbox_to_anchor=(1.0, 1.1))
    plt.ylabel('Intensity')

Я сделал все «красивые» вещи, но я не уверен, как там работать с другой осью и убедиться, что у них есть собственные системы масштабирования. Строк довольно много (с небольшим отклонением между длиной волны / тиками энергии), поэтому мне нужно иметь возможность устанавливать тики для вероятности 0,1 интервала для длины волны и 0,0001 для энергии.

Любой совет ? Помощь очень ценится! ТИА

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