[Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Jesus Cea
Haciendo el primer gráfico en
 ya me
costó tinta encontrar cómo dividir la caja de la leyenda en dos para no
machacar el gráfico, pero ahora me gustaría que a la hora de dibujar las
flechas y el programa "supiese" si poner el número arriba o abajo de la
línea y qué longitud de la flecha usar para que no haya "machaques" con
otros elementos gráficos.

Por ejemplo, en el primer gráfico de
, el
primer "6" de abajo podría haberse movido un poco a la izquierda para
evitar chocar con el 5, y el último 6 se podría haber colocado arriba en
vez de abajo para evitar cruzar la línea celeste.

¿Alguien sabe cómo hacer esto sin tener que currármelo yo a mano?.

La cosa es más clara aún en
, donde
poner simplemente los dos "3" encima en vez de debajo hubiera dejado el
gráfico más limpio.

Sugerencias bienvenidas. Gracias

-- 
Jesús Cea Avión _/_/  _/_/_/_/_/_/
j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
Twitter: @jcea_/_/_/_/  _/_/_/_/_/
jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
"Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz



signature.asc
Description: OpenPGP digital signature
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Kiko
El 19 de octubre de 2015, 14:00, Jesus Cea  escribió:

> Haciendo el primer gráfico en
>  ya me
> costó tinta encontrar cómo dividir la caja de la leyenda en dos para no
> machacar el gráfico, pero ahora me gustaría que a la hora de dibujar las
> flechas y el programa "supiese" si poner el número arriba o abajo de la
> línea y qué longitud de la flecha usar para que no haya "machaques" con
> otros elementos gráficos.
>
> Por ejemplo, en el primer gráfico de
> , el
> primer "6" de abajo podría haberse movido un poco a la izquierda para
> evitar chocar con el 5, y el último 6 se podría haber colocado arriba en
> vez de abajo para evitar cruzar la línea celeste.
>
> ¿Alguien sabe cómo hacer esto sin tener que currármelo yo a mano?.
>
> La cosa es más clara aún en
> , donde
> poner simplemente los dos "3" encima en vez de debajo hubiera dejado el
> gráfico más limpio.
>
>
En mpl, todo lo que se pinta es un objeto y se puede extraer sus
coordenadas. Puedes crear una función que inspecciones todo lo que se
grafica y establezca si mover algo en función de que esté encima o debajo
de otra cosa.

Si compartes un ejemplo reproducible puedo intentar responderte con más
detalle.


> Sugerencias bienvenidas. Gracias
>
> --
> Jesús Cea Avión _/_/  _/_/_/_/_/_/
> j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
> Twitter: @jcea_/_/_/_/  _/_/_/_/_/
> jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
> "Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
> "My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
> "El amor es poner tu felicidad en la felicidad de otro" - Leibniz
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Kiko
El 19 de octubre de 2015, 16:23, Jesus Cea  escribió:

> On 19/10/15 14:13, Kiko wrote:
> > En mpl, todo lo que se pinta es un objeto y se puede extraer sus
> > coordenadas. Puedes crear una función que inspecciones todo lo que se
> > grafica y establezca si mover algo en función de que esté encima o
> > debajo de otra cosa.
>
> Entiendo que puedes obtener el "bounding box" de un objeto. Esto es útil
> para cosas como las flechas y los números del ejemplo que comentaba,
> pero una linea diagonal de abajo a la izquierda a arriba a la derecha
> tendrá un "bound box" del gráfico entero.
>
> Una opción posible es dibujar las líneas a mano, punto a punto, y
> guardarme las coordenadas precisamente para poder ver colisiones con
> esos "bounding box" de los elementos más pequeños. Pero parece overkill.
>
> Me pregunto si hay alguna función en matplotlib que te diga si dos
> gráficos se intersecan o si un "bounding box" interseca una línea... No
> sé si el método "contains()" podría ayudar.
>
> Hay cosas peregrinas como:
> <
> https://stackoverflow.com/questions/8094374/python-matplotlib-find-intersection-of-lineplots
> >.
> Me pregunto si Matplotlib tiene algo nativo.
>

Creo que no.

Shapely sí que lo tiene [1]. Defines polilíneas y puedes obtener las
intersecciones de forma muy sencilla. Podrías usar Shapely para hallar las
intersecciones y cuando las tengas pintar como desees en mpl.

https://github.com/Toblerity/Shapely



>
> --
> Jesús Cea Avión _/_/  _/_/_/_/_/_/
> j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
> Twitter: @jcea_/_/_/_/  _/_/_/_/_/
> jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
> "Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
> "My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
> "El amor es poner tu felicidad en la felicidad de otro" - Leibniz
>
>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Jesus Cea
On 19/10/15 16:31, Kiko wrote:

> Hay cosas peregrinas como:
> 
> .
> Me pregunto si Matplotlib tiene algo nativo.
> 
> 
> Creo que no.
> 
> Shapely sí que lo tiene [1]. Defines polilíneas y puedes obtener las
> intersecciones de forma muy sencilla. Podrías usar Shapely para hallar
> las intersecciones y cuando las tengas pintar como desees en mpl.

Sí, estoy curioseando shapely, aunque la documentación tiene dos años de
retraso (La versión actual es 1.5.x y el manual habla de la 1.3.x, puf).
Ya lo había usado antes para temas de cartografía. Me preocupan un poco
sus dependencias pesadas. No todo el mundo usa Linux y tiene las
librerías GEOS y demás preinstaladas... Para lo que necesito es bastante
overkill, tengo que darle una pensada.

Gracias, Kiko.

Si alguien tiene otras ideas, soy todo ojos.

-- 
Jesús Cea Avión _/_/  _/_/_/_/_/_/
j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
Twitter: @jcea_/_/_/_/  _/_/_/_/_/
jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
"Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz



signature.asc
Description: OpenPGP digital signature
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Jesus Cea
On 19/10/15 14:13, Kiko wrote:
> En mpl, todo lo que se pinta es un objeto y se puede extraer sus
> coordenadas. Puedes crear una función que inspecciones todo lo que se
> grafica y establezca si mover algo en función de que esté encima o
> debajo de otra cosa.

Entiendo que puedes obtener el "bounding box" de un objeto. Esto es útil
para cosas como las flechas y los números del ejemplo que comentaba,
pero una linea diagonal de abajo a la izquierda a arriba a la derecha
tendrá un "bound box" del gráfico entero.

Una opción posible es dibujar las líneas a mano, punto a punto, y
guardarme las coordenadas precisamente para poder ver colisiones con
esos "bounding box" de los elementos más pequeños. Pero parece overkill.

Me pregunto si hay alguna función en matplotlib que te diga si dos
gráficos se intersecan o si un "bounding box" interseca una línea... No
sé si el método "contains()" podría ayudar.

Hay cosas peregrinas como:
.
Me pregunto si Matplotlib tiene algo nativo.

-- 
Jesús Cea Avión _/_/  _/_/_/_/_/_/
j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
Twitter: @jcea_/_/_/_/  _/_/_/_/_/
jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
"Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz



signature.asc
Description: OpenPGP digital signature
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Kiko
conda install shapely

FTW

Las dependencias en Linux y Windows se resuelven fácil.

El 19/10/15, Jesus Cea  escribió:
> On 19/10/15 16:31, Kiko wrote:
>
>> Hay cosas peregrinas como:
>>
>> .
>> Me pregunto si Matplotlib tiene algo nativo.
>>
>>
>> Creo que no.
>>
>> Shapely sí que lo tiene [1]. Defines polilíneas y puedes obtener las
>> intersecciones de forma muy sencilla. Podrías usar Shapely para hallar
>> las intersecciones y cuando las tengas pintar como desees en mpl.
>
> Sí, estoy curioseando shapely, aunque la documentación tiene dos años de
> retraso (La versión actual es 1.5.x y el manual habla de la 1.3.x, puf).
> Ya lo había usado antes para temas de cartografía. Me preocupan un poco
> sus dependencias pesadas. No todo el mundo usa Linux y tiene las
> librerías GEOS y demás preinstaladas... Para lo que necesito es bastante
> overkill, tengo que darle una pensada.
>
> Gracias, Kiko.
>
> Si alguien tiene otras ideas, soy todo ojos.
>
> --
> Jesús Cea Avión _/_/  _/_/_/_/_/_/
> j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
> Twitter: @jcea_/_/_/_/  _/_/_/_/_/
> jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
> "Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
> "My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
> "El amor es poner tu felicidad en la felicidad de otro" - Leibniz
>
>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Jesus Cea
On 19/10/15 18:06, Kiko wrote:
> conda install shapely

La dictadura de la mayoría... ¿Y si lo quiero instalar sobre un Solaris
o un FreeBSD sobre ARM? :-).

Las cosas automáticas funcionan mientras tengas lo que tiene todo el
mundo, sino más te vale saber hacerlo a mano.

En mi caso me lo documento TODO:

"""
* GEOS 3.4.2 (26/abr/15)

URL: https://trac.osgeo.org/geos/

Estado: En producción en mi portátil HP

Geometry Engine, Open Source.

  ./configure --disable-static
  make
  make check

No compilamos lo bindings Python directamente, sino que
accedemos a través del módulo "shapely".
"""

Soy de la vieja escuela, saber cómo funcionan las cosas, sin magia :).

-- 
Jesús Cea Avión _/_/  _/_/_/_/_/_/
j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
Twitter: @jcea_/_/_/_/  _/_/_/_/_/
jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
"Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz



signature.asc
Description: OpenPGP digital signature
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Jesus Cea
On 19/10/15 18:22, Juan Luis Cano wrote:
> On 2015-10-19 16:59, Jesus Cea wrote:
>> Para lo que necesito es bastante
>> overkill, tengo que darle una pensada.
> 
> Tal vez no sea tan overkill Jesús. El problema de etiquetar
> automáticamente un mapa es NP-hard[1], así que yo esperaría que hacer
> que «el programa "supiese" si poner el número arriba o abajo de la línea
> y qué longitud de la flecha usar para que no haya "machaques" con otros
> elementos gráficos» sea altamente no trivial.

Si es que siempre me pasa lo mismo, siempre en el límite del estado del
arte, puñetero perfeccionismo :-p

En mi caso las etiquetas tienen posición fija y solo habría que decidir
si ponerlas "arriba" o "abajo". Hay 2^n combinaciones, con un n bajo
(digamos 10-12 como mucho). Si añado alguna libertad más, como la
longitud de la flecha, el tema todavía parece tratable. Mi espacio de
búsqueda es limitado y, definitivamenter, tratable incluso por pura
fuerza bruta.

> [1] http://www.wikiwand.com/en/Automatic_label_placement

El artículo parece tratar exactamente lo que necesito... pero es parco
en detalles. Al menos me sirve para localizar términos de búsqueda para
seguir progresando. En todo caso parece que me he metido en un jardín
complicado... como siempre :-/.

Gracias.

-- 
Jesús Cea Avión _/_/  _/_/_/_/_/_/
j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
Twitter: @jcea_/_/_/_/  _/_/_/_/_/
jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
"Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz



signature.asc
Description: OpenPGP digital signature
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Kiko
El 19 de octubre de 2015, 18:43, Sebastian Silva 
escribió:

> Hola,
> Que coincidencia, la semana pasada tuve que ayudar a instalar esta
> dependencia en una máquina con Windows.
>
> conda no conoce a Shapely y pip no puede instalarlo porque falta una
> biblioteca
>

conda install -c https://conda.anaconda.org/scitools shapely

Más opciones aquí:
https://anaconda.org/search?type=conda=shapely

Aquí un post que escribí hace un tiempo para encontrar intersecciones con
Shapely:
http://pybonacci.org/2012/09/20/buscando-esa-playa-en-la-isla-a-mediodia-usando-shapely/

Saludos.
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Sebastian Silva
Hola,
Que coincidencia, la semana pasada tuve que ayudar a instalar esta
dependencia en una máquina con Windows.

conda no conoce a Shapely y pip no puede instalarlo porque falta una
biblioteca

Al menos es lo que vi con Python 3.4.

Entonces tuve que instalar Shapely desde el siguiente enlace:
http://www.lfd.uci.edu/~gohlke/pythonlibs/


Estos archivos whl se instalan normalmente desde la terminal con el
comando pip.

Vale la pena decir que encontré Shapely genial ;-)

Espero sirva,
Saludos

On 19/10/15 11:06, Kiko wrote:
> conda install shapely
>
> FTW
>
> Las dependencias en Linux y Windows se resuelven fácil.
>
> El 19/10/15, Jesus Cea  escribió:
>> On 19/10/15 16:31, Kiko wrote:
>>
>>> Hay cosas peregrinas como:
>>>
>>> .
>>> Me pregunto si Matplotlib tiene algo nativo.
>>>
>>>
>>> Creo que no.
>>>
>>> Shapely sí que lo tiene [1]. Defines polilíneas y puedes obtener las
>>> intersecciones de forma muy sencilla. Podrías usar Shapely para hallar
>>> las intersecciones y cuando las tengas pintar como desees en mpl.
>> Sí, estoy curioseando shapely, aunque la documentación tiene dos años de
>> retraso (La versión actual es 1.5.x y el manual habla de la 1.3.x, puf).
>> Ya lo había usado antes para temas de cartografía. Me preocupan un poco
>> sus dependencias pesadas. No todo el mundo usa Linux y tiene las
>> librerías GEOS y demás preinstaladas... Para lo que necesito es bastante
>> overkill, tengo que darle una pensada.
>>
>> Gracias, Kiko.
>>
>> Si alguien tiene otras ideas, soy todo ojos.
>>
>> --
>> Jesús Cea Avión _/_/  _/_/_/_/_/_/
>> j...@jcea.es - http://www.jcea.es/ _/_/_/_/  _/_/_/_/  _/_/
>> Twitter: @jcea_/_/_/_/  _/_/_/_/_/
>> jabber / xmpp:j...@jabber.org  _/_/  _/_/_/_/  _/_/  _/_/
>> "Things are not so easy"  _/_/  _/_/_/_/  _/_/_/_/  _/_/
>> "My name is Dump, Core Dump"   _/_/_/_/_/_/  _/_/  _/_/
>> "El amor es poner tu felicidad en la felicidad de otro" - Leibniz
>>
>>
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/

-- 
I+D SomosAzucar.Org
"icarito" #somosazucar en Freenode IRC
"Nadie libera a nadie, nadie se libera solo. Los seres humanos se liberan en 
comunión" - P. Freire

___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Juan Luis Cano

On 2015-10-19 16:59, Jesus Cea wrote:

Para lo que necesito es bastante
overkill, tengo que darle una pensada.


Tal vez no sea tan overkill Jesús. El problema de etiquetar 
automáticamente un mapa es NP-hard[1], así que yo esperaría que hacer 
que «el programa "supiese" si poner el número arriba o abajo de la línea 
y qué longitud de la flecha usar para que no haya "machaques" con otros 
elementos gráficos» sea altamente no trivial.


[1] http://www.wikiwand.com/en/Automatic_label_placement

Por supuesto soluciones ad-hoc y cosas manuales siempre las habrá, pero 
no sé si es lo que estás buscando.


Un saludo

Juanlu
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Detección automática de "sobreescritura" en matplotlib

2015-10-19 Por tema Juan Luis Cano

On 2015-10-19 18:43, Sebastian Silva wrote:

conda no conoce a Shapely y pip no puede instalarlo porque falta una
biblioteca


Sebastian tiene razón, Shapely para conda no está compilado en Windows:

https://anaconda.org/anaconda/shapely

El gran Gohlke al rescate como siempre :)

Juanlu


___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/