Подтвердить что ты не робот

Мелкие маркеры разметки в matplotlib всегда черные

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

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

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

4b9b3361

Ответ 1

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

Это устанавливает маркеры в 1 (s = 1), цвет лица - серый (facecolor = '0,5'), а ширина линии - 0 (lw = 0).

Ответ 2

Если маркер не имеет лица (он не может быть заполнен, например '+', '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)

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

Ответ 3

Самый простой ответ на ваш вопрос: используйте параметр 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 и знайте, что ваш весь маркер будет установлен на единственный цвет, который вы укажете!

Ответ 4

В ответ на zwol вопрос в комментарии - моя репутация недостаточно высока, чтобы оставлять комментарии, так что это должно быть сделано: в случае, если ваши цвета поступают из цветовой карты (т.е. из "последовательности значений" отображается "), вы можете использовать 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()