ggplot автоматически расширяет оси, чтобы убедиться, что есть место для построения точек. Вы можете отключить это поведение с помощью аргумента expand
ggplot(sub1, aes(x=YR,y=Freq)) +
geom_bar(stat='identity') +
annotate("text",x=3,y=14.9,label="Population status",cex=10) +
scale_y_continuous(expand = c(0, 0), limits = c(0, 15))
Когда вы печатаете строку, вы получаете вывод метода __str__
объекта - в этом случае строка без кавычек. Метод __str__
списка отличается, он создает строку, содержащую открытие и закрытие []
, и строку, создаваемую методом __repr__
для каждого объекта, содержащегося внутри. То, что вы видите, - это разница между __str__
и __repr__
.
Вместо этого вы можете создать свою собственную строку:
print '[' + ','.join("'" + str(x) + "'" for x in s) + ']'
Эта версия должна работать как с Unicode, так и с байтовые строки в Python 2:
print u'[' + u','.join(u"'" + unicode(x) + u"'" for x in s) + u']'
Другое решение
s = ['äåö', 'äå']
encodedlist=', '.join(map(unicode, s))
print(u'[{}]'.format(encodedlist).encode('UTF-8'))
дает [äåö, äå]
В Python 2.x по умолчанию используется то, что вы испытываете:
>>> s = ['äåö']
>>> s
['\xc3\xa4\xc3\xa5\xc3\xb6']
Однако в Python 3 он отображается правильно:
>>> s = ['äåö']
>>> s
['äåö']
Можно использовать этот класс оболочки:
#!/usr/bin/python
# -*- coding: utf-8 -*-
class ReprToStrString(str):
def __repr__(self):
return "'" + self.__str__() + "'"
class ReprToStr(object):
def __init__(self, printable):
if isinstance(printable, str):
self._printable = ReprToStrString(printable)
elif isinstance(printable, list):
self._printable = list([ReprToStr(item) for item in printable])
elif isinstance(printable, dict):
self._printable = dict(
[(ReprToStr(key), ReprToStr(value)) for (key, value) in printable.items()])
else:
self._printable = printable
def __repr__(self):
return self._printable.__repr__()
russian1 = ['Валенки', 'Матрёшка']
print russian1
# Output:
# ['\xd0\x92\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xba\xd0\xb8', '\xd0\x9c\xd0\xb0\xd1\x82\xd1\x80\xd1\x91\xd1\x88\xd0\xba\xd0\xb0']
print ReprToStr(russian1)
# Output:
# ['Валенки', 'Матрёшка']
russian2 = {'Валенки': 145, 'Матрёшка': 100500}
print russian2
# Output:
# {'\xd0\x92\xd0\xb0\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xba\xd0\xb8': 145, '\xd0\x9c\xd0\xb0\xd1\x82\xd1\x80\xd1\x91\xd1\x88\xd0\xba\xd0\xb0': 100500}
print ReprToStr(russian2)
# Output:
# {'Матрёшка': 100500, 'Валенки': 145}
Это удовлетворительно?
>>> s = ['äåö', 'äå']
>>> print "\n".join(s)
äåö
äå
>>> print ", ".join(s)
äåö, äå
>>> s = [u'åäö']
>>> print ",".join(s)
åäö
unicode
? Я обновил свой вопрос для этого случая строк в Юникоде.
– Parham
28 May 2013 в 19:45