Matplotlib строит графики разного цвета для одной и той же категории (ошибка?) - PullRequest
0 голосов
/ 20 апреля 2020

Этот фрагмент кода сводит меня с ума.

Может кто-нибудь объяснить, почему в третьей категории есть 3 разных цвета (желтый, зеленый и фиолетовый), когда все они должны иметь одинаковый цвет?

Я испробовал все возможности, но он всегда возвращает одно и то же.

Что не так с кодом?

#----------------------------------------
# get the data
PATH = '/kaggle/input/the-50-plot-challenge/mpg_ggplot2.csv'
df = pd.read_csv(PATH)
gb_df = df.groupby(["cty", "hwy"]).size().reset_index(name = "counts")
gb_df.sort_values(["cty", "hwy", "counts"], ascending = True, inplace = True)

fig = plt.figure(figsize = (20, 10))
ax = fig.add_subplot()
colors = {i:np.random.rand(3,) for i in sorted(list(gb_df["cty"].unique()))}

for x in sorted(list(gb_df["cty"].unique())):

    x_values = gb_df[gb_df["cty"] == x]["cty"]
    y_values = gb_df[gb_df["cty"] == x]["hwy"]
    size = gb_df[gb_df["cty"] == x]["counts"]
    color = colors[x]

    ax.scatter(x_values, y_values, s = size*10, c = color)

    ax.set_title("Count plot")

enter image description here

1 Ответ

1 голос
/ 20 апреля 2020

Я думаю, что вы используете старую версию matplotlib, поскольку я получаю следующее предупреждение (matplotlib 3.1.3):

'c' аргумент выглядит как одна цифра c Последовательность RGB или RGBA, которую следует избегать, так как отображение значений будет иметь приоритет в случае совпадения его длины с «x» и «y». Пожалуйста, используйте двумерный массив с одной строкой, если вы действительно хотите указать одно и то же значение RGB или RGBA для всех точек.

Это именно то, что происходит в вашем случае. Решение простое:

ax.scatter(x_values, y_values, s = size*10, c = [color])

Кроме того, вы должны изменить случайные цвета, чтобы они были в пределах 0 и 1:

colors = {i:np.random.random(3,) for i in ...}

Подробно, поскольку третья категория имеет такое же количество items (three) в качестве цвета, matplotlib будет использовать карту цветов (по умолчанию viridis), чтобы отобразить значение в цвет. Действительно, если вы проверите цветовую карту viridis , вы увидите, что она, кажется, содержит эти три цвета.

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