У colorplotlib colorbar есть случайная тень, как я могу ее удалить? - PullRequest
0 голосов
/ 06 марта 2019

У меня есть цветовая карта слева от графика (сама по себе это была серьезная проблема, кажется, что только правая и верхняя части поддерживаются нормально) без границ или галочек.

Когда это рендеринг, он имеет то, что похоже на маленькую тень.Похоже, что это основано на цвете середины цветной полосы, и оно меняет положение в зависимости от толщины полосы и становится невидимым, если толщина полосы превышает несколько мм.

Пример кода:

from mpl_toolkits.axes_grid1 import make_axes_locatable

fig1 = plt.figure()
ax = fig1.subplots()

#Gradient bar
divider = make_axes_locatable(ax)
cax = divider.append_axes("left", size=0.1, pad=0.5)

X = [[.6, .6], [.7, .7]]
im = cax.imshow(X, interpolation='bicubic', aspect='auto')
cb = fig1.colorbar(im, cax=cax, orientation='vertical')
cb.outline.set_visible(False)
for position, spine in cax.spines.items():
    spine.set_visible(False)
cax.get_xaxis().set_ticks([])
cax.get_yaxis().set_ticks([])

plt.tight_layout()

plt.show()

#from io import BytesIO
#f = BytesIO()
#plt.savefig(f, format="svg")

#import xml.etree.cElementTree as ET

#tree, xmlid = ET.XMLID(f.getvalue())

#fn = "DebugTest" + ".svg"
#ET.ElementTree(tree).write(fn)

Я включил выходной код svg, поскольку его можно просматривать в средстве просмотра изображений или в браузере, который позволяет изменять масштаб.

Эффект также зависит отразрешение и размер окна дисплея.

Это какой-то артефакт рендеринга?Как я могу избавиться от этого?

image: top of bar

В моем реальном проекте я встраиваю svgs в html и pdf документы и в те тенине выглядит как пиксельный артефакт, вы можете увеличивать его в большом размере, и это становится очень очевидным:

изображение: увеличенное изображение pdf

1 Ответ

0 голосов
/ 11 марта 2019

Как уже упоминалось в комментариях, проблема заключалась в том, что команда imshow () отображала изображение, которое иногда было не совсем выровнено с цветной полосой, которая впоследствии была помещена поверх него. Это было скопировано прямо из ответа stackoverflow здесь: Можно ли разместить вертикальную цветную полосу слева от графика в matplotlib?

Решения, предложенные в комментариях, менее полезны, но я со временем решил, как создать изображение без imshow:

X = [[.6, .6], [.7, .7]]
im = image.AxesImage(None, interpolation='bicubic')
im.set_array(X)
cb = fig1.colorbar(im, cax=cax, orientation='vertical')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...