Ответ 1
scatter([1,2,3], [2,4,5], s=1, facecolor='0.5', lw = 0)
Это устанавливает маркеры в 1 (s = 1), цвет лица - серый (facecolor = '0,5'), а ширина линии - 0 (lw = 0).
Я пытаюсь использовать matplotlib для создания графика рассеяния с очень маленькими серыми точками. Из-за плотности точек точки должны быть небольшими. Проблема состоит в том, что маркеры функции разброса(), похоже, имеют как линию, так и заполнение. Когда маркеры маленькие, отображается только строка, а не заливка, а линия не соответствует цвету (она всегда черная).
Я могу получить именно то, что хочу, используя gnuplot: plot 'nodes' с точками pt 0 lc rgb 'gray'
Как я могу сделать очень маленькие серые точки, используя matplotlib scatterplot()?
scatter([1,2,3], [2,4,5], s=1, facecolor='0.5', lw = 0)
Это устанавливает маркеры в 1 (s = 1), цвет лица - серый (facecolor = '0,5'), а ширина линии - 0 (lw = 0).
Если маркер не имеет лица (он не может быть заполнен, например '+'
, '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)
потому что край/строка не будет отображаться, поэтому ничего не будет отображаться.
Самый простой ответ на ваш вопрос: используйте параметр 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
и знайте, что ваш весь маркер будет установлен на единственный цвет, который вы укажете!
В ответ на 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()