#python #matplotlib
Вопрос:
Я хотел бы, чтобы расстояние между элементами легенды увеличивалось вместо одного значения ( labelspacing
). Последний принимает только int
тип значения, но мне нужен переменный интервал между элементами легенды. Кроме того, я хочу markerfacecolor
, чтобы цветовая карта соответствовала цветовой карте, используемой при создании точечной диаграммы.
N = 45
x, y = np.random.rand(2, N)
s = np.random.randint(10, 1000, size=N)
fig, ax = plt.subplots()
scatter = ax.scatter(x, y, c=s, s=s)
cbar = fig.colorbar(scatter,
ax=ax,
label='Size',
fraction=0.1,
pad=0.04)
# produce a legend with a cross section of sizes from the scatter
handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6)
for hd in handles:
hd.set_markeredgewidth(2)
hd.set_markeredgecolor("red")
hd.set_markerfacecolor('blue')
legend2 = ax.legend(
handles[::2], labels[::2], loc="upper right", title="Sizes", labelspacing=1.2
)
plt.show()
Я искал StackOverflow и попробовал некоторые возможные методы, но безуспешно. Может ли кто-нибудь подсказать, как я могу достичь желаемого результата?
Ответ №1:
Мне удалось установить markerfacecolor
в качестве цветовой карты. Но я все еще борюсь с переменной labelspacing
!.
Любая помощь!
N = 45
x, y = np.random.rand(2, N)
s = np.random.randint(10, 1000, size=N)
fig, ax = plt.subplots()
scatter = ax.scatter(x, y, c=s, s=s)
cbar = fig.colorbar(scatter,
ax=ax,
label='Size',
fraction=0.1,
pad=0.04)
# produce a legend with a cross section of sizes from the scatter
handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6)
leg_colrs = [color.get_markerfacecolor() for color in scatter.legend_elements()[0]]
for hd, color in zip(handles, leg_colrs):
hd.set_markeredgewidth(2)
hd.set_markeredgecolor("red")
hd.set_markerfacecolor(color)
legend2 = ax.legend(
handles[::2], labels[::2], loc="upper right", title="Sizes", labelspacing=1.2
)
plt.show()