Как интерполировать кривые в matplotlib? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь интерполировать между кривыми, где между ними есть пробелы, как это видно на графиках ниже. Я использую библиотеку matploblib и Python 3 для этого. Я пытался найти некоторые ресурсы в Интернете, но не смог найти ничего хорошего для такого начинающего, как я. Как я уже упоминал, я использую matplotlib, но открыт для использования других библиотек (seaborn?), Которые могут быть лучше для этого. Спасибо!

Обновление: как было предложено в комментариях, я попытался использовать метод plt.fill_between() с интерполяцией = True с новой картой цветов (viridis). Тем не менее, результат ниже. Что-то не работает Какие-либо предложения? Я приложил код для моего графика ниже.

        import Model

        rates = [rate for rate in range(1, 10000, 100)]
        starts = [rates[jj] / 27 for jj in range(len(rates))]
        combo = dict(zip(rates, starts))
        curves = [model.Model(start=combo[rt], R=rt) for rt in combo.keys()]
        for curve in curves:
            curve.run_model()
        to_plot = ['SO4', 'H2S', 'd34S_s', 'd34S_H2S']
        logged = [log(xx) for xx in curves[0].f_in]
        colors = plt.cm.viridis(np.linspace(0, 1, len(rates)))

        for obj in curves:
            for element in to_plot:
                plt.subplot(2, 2, to_plot.index(element) + 1)               
                plt.plot(logged,
                getattr(obj,element),color=colors[curves.index(obj)])
                plt.fill_between(logged, getattr(obj, element), interpolate=True, cmap='viridis')
        sm = plt.cm.ScalarMappable(cmap='viridis', norm=plt.Normalize(vmin=min(rates), vmax=max(rates)))
        plt.colorbar(sm,label=var)
        plt.show()

...