Непрерывный цвет на нескольких участках в python - PullRequest
0 голосов
/ 28 февраля 2020

enter image description here Это график зависимости углерода (y1985 и c) от расстояния (st).

Я пытаюсь отобразить изменения параметра во времени с помощью цвета ... поэтому я хотел бы иметь непрерывный градиент цвета, проходящий через все графики, например от светло-голубого до темно-синего, которые представляют 1985-2018 гг. Или цветная карта «jet», проходящая через ... Это возможно?

fig, ax = plt.subplots()
ax.scatter(dfc['st'],dfc['y1985'],c='lightskyblue')
ax.scatter(dfc['st'],dfc['y1986'],c='lightskyblue')
ax.scatter(dfc['st'],dfc['y1987'],c='cornflowerblue')
ax.scatter(dfc['st'],dfc['y1988'],c='cornflowerblue')
ax.scatter(dfc['st'],dfc['y1989'],c='steelblue')
ax.scatter(dfc['st'],dfc['y1990'],c='steelblue')
ax.scatter(dfc['st'],dfc['y1991'],c='royalblue')
ax.scatter(dfc['st'],dfc['y1992'],c='royalblue')
ax.scatter(dfc['st'],dfc['y1993'],c='navy')
ax.scatter(dfc['st'],dfc['y1994'],c='navy')
ax.scatter(dfc['st'],dfc['y1995'],c='lightgreen')
ax.scatter(dfc['st'],dfc['y1996'],c='lightgreen')
ax.scatter(dfc['st'],dfc['y1997'],c='mediumseagreen')
ax.scatter(dfc['st'],dfc['y1998'],c='mediumseagreen')
ax.scatter(dfc['st'],dfc['y1999'],c='seagreen')
ax.scatter(dfc['st'],dfc['y2000'],c='seagreen')
ax.scatter(dfc['st'],dfc['y2001'],c='green')
ax.scatter(dfc['st'],dfc['y2002'],c='green')
ax.scatter(dfc['st'],dfc['y2003'],c='darkgreen')
ax.scatter(dfc['st'],dfc['y2004'],c='darkgreen')
ax.scatter(dfc['st'],dfc['y2005'],c='lightsalmon')
ax.scatter(dfc['st'],dfc['y2006'],c='lightsalmon')
ax.scatter(dfc['st'],dfc['y2007'],c='darksalmon')
ax.scatter(dfc['st'],dfc['y2008'],c='darksalmon')
ax.scatter(dfc['st'],dfc['y2009'],c='coral')
ax.scatter(dfc['st'],dfc['y2010'],c='coral')
ax.scatter(dfc['st'],dfc['y2011'],c='orangered')
ax.scatter(dfc['st'],dfc['y2012'],c='orangered')
ax.scatter(dfc['st'],dfc['y2013'],c='maroon')
ax.scatter(dfc['st'],dfc['y2014'],c='maroon')
ax.scatter(dfc['st'],dfc['y2015'],c='mediumpurple')
ax.scatter(dfc['st'],dfc['y2016'],c='mediumpurple')
ax.scatter(dfc['st'],dfc['y2017'],c='rebeccapurple')
ax.scatter(dfc['st'],dfc['y2018'],c='rebeccapurple')

Спасибо за любую помощь:)

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Пакеты:

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

Пример данных:

dfc = pd.DataFrame({'st':[1,2,3,4,5], 'y1985':[2,4,6,7,8], 'y1986':[4,5,6,7,10], 'y1987':[7,9,11,12,15]})

Данные представлены в широком формате, для Matplotlib длинный формат подходит лучше. Для этого мы можем использовать pd.melt:

ndfc = pd.melt(dfc, id_vars = ['st'])

Затем нам нужно перекодировать данные времени в следующей последовательности:

ndfc['code'] = pd.factorize(ndfc['variable'])[0]

Сюжет:

fig, ax = plt.subplots()
ax.scatter(ndfc['st'],ndfc['value'],c=ndfc['code'], cmap="jet_r")
0 голосов
/ 28 февраля 2020

Если вы посмотрите на этот пример графика , он создаст случайный массив для цветов:

...
theta = 2 * np.pi * np.random.rand(N)
colors = theta
...
c = ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)

Поскольку я не имею никакого представления о ваших данных, я даю вам приблизительный ответ:

import numpy as np

years = ['y' + str(i) for i in range(1985, 2019)]
len_years = len(years)
colors = 2 * np.pi * np.random.rand(len_years)

fig, ax = plt.subplots()
for idx, year in enumerate(years):
  ax.scatter(dfc['st'],dfc[year], c=colors[idx])

Надеюсь, это поможет:)

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