Самый простой способ отображать значения в виде символов на точечной диаграмме?

В ответ на мой более ранний вопрос, касающийся фиксации цветового пространства для точечных изображений 4D-данных, Tom10 предложил отображать значения в виде символов, чтобы перепроверить мои данные. Отличная идея. Я запускал несколько подобных демонстраций в прошлом, но я не могу найти демо, которое, как я помню, было довольно простым.

Итак, какой самый простой способ изобразить числовые значения в качестве символа на точечной диаграмме вместо, например, «о»? Tom10 предложил plt.txt(x,y,value) - и это реализация, используемая в ряде примеров. Однако мне интересно, есть ли простой способ оценить «значение» из моего массива чисел? Можно ли просто сказать: str(valuearray)?

Нужен ли вам цикл для оценки значений для построения графика, как это предлагается в демонстрационном разделе matplotlib для разброса 3D-текста участки?

Их пример производит:

alt text
(источник: sourceforge.net )

Однако они делают что-то довольно сложное при оценке местоположений, а также изменении направления текста на основе данных. Итак, есть ли симпатичный способ построить данные x, y, C (где C - это значение, которое часто используется в качестве цвета в данных графика, но вместо этого я хочу сделать символ)?

Опять же, я думаю, что у нас есть честный ответ на этот вопрос — мне просто интересно, есть ли более простой способ?


person AllenH    schedule 02.06.2010    source источник


Ответы (1)


Самый простой способ, который я видел, это:

for x, y, val in zip(x_array, y_array, val_array):
    plt.text(x, y, val)

Кроме того, кстати, вы предложили использовать str(valarray), и это, как вы могли заметить, не работает. Чтобы преобразовать массив чисел в последовательность строк, вы можете использовать

valarray.astype(str)

чтобы получить массив numpy или,

[str(v) for v in valarray]

чтобы получить список Python. Но даже если valarray является правильной последовательностью строк, plt.text не будет перебирать свои входные данные.

person tom10    schedule 05.06.2010
comment
ой! - так что вам нужно повторить для plt.text? (извините, я недавно не проверял stackoverflow - пропустил ваш ответ, Том!) - person AllenH; 24.06.2010