Это должно быть что-то очень простое, но я не могу найти ответ на форуме в любом месте. Вот основная проблема:Аннотирование рисунка с использованием String со странными символами
У меня есть набор CSV файлов вида:
"X, Temp ° C \ n1,25 \ п ..."
Обратите внимание на символ степени, то станет сердцем моей проблемы. Я использую NumPy и Matplotlib и импортировать этот файл, используя:
GT_kwargs = dict(delimiter=',',names=True)
data_array = numpy.genfromtxt(filenm, **GT_kwargs)
Это правильно производит Numpy массив с dtypes:
[('X', '<f8'), ('Temp_\xb0C', '<f8')]
До сих пор так хорошо. Участки данных просто отлично, проблема возникает, когда я хочу, чтобы аннотировать кривые, используя имена вытащили из заголовка, в частности, если я стараюсь передать:
pyplot.annotate(data_array.dtype.names[1], xy=(1,1))
Это бросает:
ValueError: дисплей Matplotlib текст должен иметь все коды < 128 или использовать строки Unicode
Очевидно, проблема заключается в \ xb0C как знак степени. Я попытался заменить символ на строку unicode, но это ничего не делает. Как изменить эту строку, чтобы включить аннотацию в символ степени?
EDIT: Я немного сузил свой вопрос. Как я могу указать кодировку строки? Это действительно основной вопрос, но я все еще не могу найти ответ (что часто бывает так). Полезной будет ссылка на хорошую документацию.
как вы пытались сделать строку unicode? – tacaswell
Часть проблемы в том, что я новичок в использовании юникода. Мне сложно преобразовать строку в unicode. Я пробовал кучу немых вещей, таких как unicode (string), которые все бросают: UnicodeDecodeError: кодек ascii не может декодировать байт 0xb0 в позиции 3: порядковый номер не в диапазоне (128) –
Вещи, которые я пытался конвертировать эта строка (некоторые являются глупыми): 'code'string = "T \ xb0C", tmp = unicode (string), tmp = unicode (string, encoding = "utf-8"), tmp = unicode (строка, кодировка = "utf-16"), tmp = unicode (string, encoding = "utf-32") –