маркеры небольших разбросов в matplotlib всегда черные - PullRequest
54 голосов
/ 28 июня 2011

Я пытаюсь использовать matplotlib для создания точечного графика с очень маленькими серыми точками.Из-за плотности точек, точки должны быть маленькими.Проблема в том, что маркеры функции scatter (), похоже, имеют и строку, и заливку.Когда маркеры маленькие, видна только линия, а не заливка, а линия имеет неправильный цвет (всегда черный).

Я могу получить именно то, что хочу, используя узлы gnuplot: plot ''с точками pt 0 lc rgb' grey '

Как сделать очень маленькие серые точки, используя matplotlib scatterplot ()?

Ответы [ 4 ]

70 голосов
/ 28 июня 2011
scatter([1,2,3], [2,4,5], s=1, facecolor='0.5', lw = 0)

Устанавливает размер маркера на 1 (s = 1), цвет лица на серый (facecolor = '0.5'), а ширину линии на 0 (lw = 0).

30 голосов
/ 24 октября 2011

Если маркер не имеет грани (не может быть заполнен, например, '+', 'x'), тогда вместо c следует установить edgecolor, а lw не должно быть 0:

scatter([1,2,3], [2,4,5], marker='+', edgecolor='r')

Следующее не будет работать

scatter([1,2,3], [2,4,5], s=1,  marker='+', facecolor='0.5', lw = 0)

, потому что край / линия не будут отображаться, поэтому ничего не будет отображаться.

4 голосов
/ 21 октября 2015

Абсолютно простой ответ на ваш вопрос: используйте параметр color вместо параметра c, чтобы установить цвет всего маркера.

При сравнении результатов легко увидеть разницу:

from matplotlib import pyplot as plt

plt.scatter([1,2,3], [3,1,2], c='0.8')  # marker not all gray

plt.scatter([1,2,3], [3,1,2], color='0.8')  # marker all gray

подробности: Для вашего простого случая использования, когда вы просто хотите, чтобы весь маркер был одного и того же оттенка серого, вам действительно не нужно беспокоиться о таких вещах, как цвет лица или цвет ребра, а также то, определен ли ваш маркер как все ребра или какой-то другой. края и некоторые заполняют. Вместо этого просто используйте параметр color и знайте, что весь маркер будет установлен на один указанный вами цвет!

1 голос
/ 30 декабря 2016

В ответ на вопрос zwol в комментариях - моя репутация недостаточно высока, чтобы оставлять комментарии, так что это нужно будет сделать: В случае, если ваши цвета взяты из карты цветов (то есть, из "последовательности значений mapped ") вы можете использовать color =, как показано ниже:

from matplotlib import pyplot

x = [1,5,8,9,5]
y = [4,2,4,7,9]
numSides = [2,3,1,1,5]

cmap = pyplot.cm.get_cmap("copper_r")

min, max = min(numSides), max(numSides)
for i in range(len(x)):
    if numSides[i] >= 2:
        cax = pyplot.scatter(x[i], y[i], marker = '+', s = 100, c = numSides[i], cmap = cmap)
        cax.set_clim(min, max)
    elif numSides[i] == 1:
        pyplot.scatter(x[i], y[i], marker = '.', s = 40, color = cmap(numSides[i]))

fig = pyplot.gcf()
fig.set_size_inches(8.4, 6)
fig.savefig('figure_test.png', dpi = 200)
pyplot.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...