Создание разных цветовых полос для комбинированного точечного графика - PullRequest
1 голос
/ 26 апреля 2020

Могу ли я иметь две цветовые полосы, соответствующие каждому графику рассеяния? Я не понимаю, почему второй график рассеяния создает вторую цветовую полосу, но использует цветовую карту предыдущего графика.

import pandas as pd
import matplotlib.pyplot as plt

fig = plt.figure(num=1, clear=True)
ax = fig.add_subplot()

d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})

d.plot.scatter(x='a', y='b', c='c', cmap='GnBu', ax=ax)
e.plot.scatter(x='a', y='b', c='c', cmap='RdPu', ax=ax)

enter image description here

1 Ответ

2 голосов
/ 27 апреля 2020

Pandas построение графиков делает многое автоматически, но потом не всегда легко изменить. В этом случае pandas не учитывает, что дважды используется один и тот же ax, и дважды вызывает plt.colorbar.

Если требуется манипулирование результатом, его часто проще создать сюжет прямо с матплотлиб. Обратите внимание, что вторая цветовая полоса нарисована ближе всего к графику. Поэтому порядок изменяется в приведенном ниже коде.

import pandas as pd
import matplotlib.pyplot as plt

fig = plt.figure(num=1, clear=True)
ax = fig.add_subplot()

d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})

d_scatter = ax.scatter(x=d['a'], y=d['b'], c=d['c'], cmap='GnBu')
e_scatter = ax.scatter(x=e['a'], y=e['b'], c=e['c'], cmap='RdPu')
plt.colorbar(e_scatter)
plt.colorbar(d_scatter)

plt.show()

demo plot

PS: при наличии нескольких цветовых полос столбцы также могут быть положить явно в свой собственный сюжет. Таким образом, взаимные расстояния можно контролировать лучше. Особенно, когда будет 3 или более цветных полос, иначе все будет выглядеть ужасно.

import pandas as pd
import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=3, gridspec_kw={'width_ratios': [15, 1, 1] })

d = pd.DataFrame({'a': range(10), 'b': range(10), 'c': range(10)})
e = pd.DataFrame({'a': range(1,11), 'b': range(10), 'c': range(10)})

d_scatter = axes[0].scatter(x=d['a'], y=d['b'], c=d['c'], cmap='GnBu')
e_scatter = axes[0].scatter(x=e['a'], y=e['b'], c=e['c'], cmap='RdPu')

plt.colorbar(d_scatter, cax=axes[1])
plt.colorbar(e_scatter, cax=axes[2])

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