Создать дискретную цветовую панель в matplotlib - PullRequest
0 голосов
/ 18 ноября 2018

Я пробовал другие темы, но не могу решить, как решить.Я пытаюсь создать дискретную цветовую панель.Большая часть кода, кажется, работает, дискретная полоса действительно появляется, но метки ошибочны, и это выдает ошибку: «Не найдено ни одного сопоставимого для создания цветовой шкалы. Сначала определите сопоставляемую информацию, такую ​​как изображение (с imshow) илинабор контуров (с контуром). "

Я уверен, что ошибка в том, что мне не хватает аргумента в plt.colorbar, но я не уверен, что он запрашивает или как его определить.

Ниже то, что у меня есть.Любые мысли с благодарностью принимаются:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
norm = mpl.colors.BoundaryNorm(np.arange(-0.5,4), cmap.N) 

ex2 = sample_data.plot.scatter(x='order_count', y='total_value',c='cluster', marker='+', ax=ax, cmap='plasma', norm=norm, s=100, edgecolor ='none', alpha=0.70)

plt.colorbar(ticks=np.linspace(0,3,4))
plt.show()

1 Ответ

0 голосов
/ 18 ноября 2018

Действительно, первый аргумент colorbar должен быть ScalarMappable, который будет представлять собой график рассеяния PathCollection.

Настройка

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

df = pd.DataFrame({"x" : np.linspace(0,1,20),
                   "y" : np.linspace(0,1,20),
                   "cluster" : np.tile(np.arange(4),5)})

cmap = mpl.colors.ListedColormap(["navy", "crimson", "limegreen", "gold"])
norm = mpl.colors.BoundaryNorm(np.arange(-0.5,4), cmap.N) 

Pandas plotting

Проблема заключается в том, что pandas не предоставляет вам доступ к этому ScalarMappable напрямую.Таким образом, его можно поймать из списка коллекций на осях, что легко сделать, если присутствует только одна коллекция: ax.collections[0].

fig, ax = plt.subplots()
df.plot.scatter(x='x', y='y', c='cluster', marker='+', ax=ax, 
                cmap=cmap, norm=norm, s=100, edgecolor ='none', alpha=0.70, colorbar=False)

fig.colorbar(ax.collections[0], ticks=np.linspace(0,3,4))
plt.show()

Построение Matplotlib

Можно рассмотретьиспользуя matplotlib напрямую для построения диаграммы, в этом случае вы бы непосредственно использовали возврат функции scatter в качестве аргумента для colorbar.

fig, ax = plt.subplots()
scatter = ax.scatter(x='x', y='y', c='cluster', marker='+', data=df,
                cmap=cmap, norm=norm, s=100, edgecolor ='none', alpha=0.70)

fig.colorbar(scatter, ticks=np.linspace(0,3,4))
plt.show()

Вывод в обоих случаях идентичен.

enter image description here

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