Моя цель состоит в том, чтобы (настолько элегантно, насколько это возможно) создать легенду для графика рассеяния, который показывает минимум, средний и максимальный размеры точек рассеяния.
Я экспериментирую с использованием legend_elements
функция. Я просмотрел demo и документацию, но не похоже, что есть способ сделать то, что я хочу, с помощью этой функции.
Затем я попытался набрать то же количество очков, что и у меня. Причина в том, что я могу выбрать первую, среднюю и последнюю точки, чтобы приблизить минимум, среднее и максимальное. Однако минимальные и максимальные точки, которые показывает легенда, не являются минимальными и максимальными точками в данных. Почему при вызове одного и того же количества легенд о точках в качестве точек выборки не было получено минимальное и максимальное значения? Можно ли использовать вспомогательную функцию, например legend_elements
, для создания легенды, показывающей минимальный, средний и максимальный размеры точек на точечной диаграмме?
import matplotlib.pyplot as plt
import numpy as np
# ensure repeatability
np.random.seed(123456)
NSAMPS = 100 # Number of scattered points
idx = [0, NSAMPS // 2, -1] # min-medium-max coordinates
# randomly sample x, y, and size from 0 to 100
RandomMatrix = 100 * np.random.random((NSAMPS, 3))
# make scatter plot
sc = plt.scatter(RandomMatrix[:, 0], RandomMatrix[:, 1], s=RandomMatrix[:, 2])
# recover the same number of element sizes
sizes = sc.legend_elements("sizes", num=NSAMPS)
# parse the sizes for the first, middle, and last entries
args = (list(np.array(sizes[0])[idx]), list(np.array(sizes[1])[idx]))
# show that the estimated min and max sizes are 1.6 and 98.4, respectively
plt.legend(*args, **{'title': "I want the true min-med-max here! [thanks for taking a look:)]", 'bbox_to_anchor': (1, 1)})
# save figure
plt.savefig('mybigprobelem')
# show that the true minimum and maximum sizes are 1.06 and 98.9
# (I wish for these numbers/sizes to be in the first and third legend positions)
print('True min-max: ', RandomMatrix[:, 2].min(), RandomMatrix[:, 2].max())
True min-max: 1.0692999366311629 98.89493616046823