Получаване на пикселно местоположение за контурна диаграма на matplotlib

Имам приложение за контурно начертаване, което бих искал да знам местоположението на пикселите на началото на осите. Прочетох Урок за трансформация, но не изглежда, че работи правилно.

Ето кода, адаптиран от програмата Contour Demo:

#!/usr/bin/env python
"""
Illustrate simple contour plotting, contours on an image with
a colorbar for the contours, and labelled contours.

See also contour_image.py.
"""
import matplotlib

matplotlib.use('Agg')

import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'

delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
# difference of Gaussians
Z = 10.0 * (Z2 - Z1)

# Create a simple contour plot with labels using default colors.  The
# inline argument to clabel will control whether the labels are draw
# over the line segments of the contour, removing the lines beneath
# the label
plt.figure()
CS = plt.contour(X, Y, Z)
plt.clabel(CS, inline=1, fontsize=10)
plt.title('Simplest default with labels')

print "Origin:\t", plt.gca().transData.transform((-3.0, -2.0))

plt.savefig("cdemo.png")

Резултатът е: Произход: [ 80. 48.]

И следното изображение: въведете описание на изображението тук

Въпреки това, когато гледам това с редактор, който показва позицията на курсора в пиксели (GIMP), той показва местоположението на произхода като (100 540). Разбирам, че произходът на Matplotlib е долу вляво, а GIMP брои от горния ляв ъгъл, така че коригирайки това с размера на изображението от (800, 600), което ми дава преведено местоположение от (100,60).

Някакви идеи? Ето изображението с приблизителното местоположение на (80, 48), маркирано в червено долу вляво. въведете описание на изображението тук

Използване на matplotlib 1.4.3 Благодаря!


person CoAstroGeek    schedule 02.10.2015    source източник
comment
Уверете се, че dpi на запазената фигура съвпада с dpi на фигурния обект. По подразбиране те са 80 и 100, което може да е източникът на несъответствието.   -  person tacaswell    schedule 03.10.2015
comment
Това беше точно. Следното решава проблема: plt.figure(dpi=100)   -  person CoAstroGeek    schedule 03.10.2015
comment
Можете ли да напишете това като отговор на собствения си въпрос?   -  person tacaswell    schedule 03.10.2015


Отговори (1)


tcaswell го закова - проблемът беше несъответствие в dpi между обекта на фигурата и записания файл с изображение. figure() по подразбиране е 80 dpi, докато savefig() е по подразбиране 100 dpi

Така че можете да го поправите по два начина... Променете dpi на извикването figure(), за да съответства на savefig() по подразбиране:

plt.figure(dpi=100)

Или можете да промените dpi на извикването на savefig(), за да съответства на фигурата() по подразбиране:

plt.savefig("cdemo.png", dpi=80)
person CoAstroGeek    schedule 02.10.2015