访问散点图的matplotlib对象

时间:2017-05-02 12:08:35

标签: python matplotlib

给定matplotlib 2.0.0散点图,几点,我想注释一些点而不重叠其他点。对于注释,我使用adjustText来获取matplotlib对象的可选列表(使用.get_window_extent()方法)来避免。但是我还不知道如何在散点图中为这些点获取这些对象。

如何从散点图中获取.get_window_extent()的(点)对象列表?

考虑例如:

import matplotlib.pyplot as plt
from adjustText import adjust_text
x,y = [1,2,3,4,5],[2,4,6,8,10]
scatter = plt.scatter(x,y)
annotations = []
for x_i, y_i in zip(x[:-3],y[:-3]):
    annotations.append(plt.text(x_i,y_i, 'foobar'))
adjust_text(annotations, add_objects=scatter)

使用add_objects=

  • scatter会抛出TypeError: 'PathCollection' object is not iterable
  • scatter.get_paths()会抛出AttributeError: 'Path' object has no attribute 'get_window_extent'

1 个答案:

答案 0 :(得分:0)

我认为你错过了x中的其他参数。您可以直接向函数提供点的yadjust_text(annotations,x=x,y=y) 坐标:

import matplotlib.pyplot as plt
from adjustText import adjust_text
plt.rcParams["figure.figsize"] = 3,2
x,y = [1,2,3,4,5],[2,4,2,8,10]
scatter = plt.scatter(x,y)
annotations = []
for x_i, y_i in zip(x,y):
    annotations.append(plt.text(x_i,y_i, 'foobar {},{}'.format(x_i,y_i)))
adjust_text(annotations,x=x,y=y)

plt.show()

完整示例:

    05-02 14:50:11.907 11066-11066/com.example.nicol.etablissement43 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
05-02 14:50:12.460 11066-11180/com.example.nicol.etablissement43 E/GED: Failed to get GED Log Buf, err(0)
05-02 14:50:12.551 11066-11066/com.example.nicol.etablissement43 W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
05-02 14:50:20.547 11066-11066/com.example.nicol.etablissement43 W/System.err: org.json.JSONException: Value [{"id":"1","ville":"ARAULES"},{"id":"2","ville":"AUREC SUR LOIRE"},{"id":"3","ville":"AUREC SUR LOIRE"},{"id":"4","ville":"BAINS"},{"id":"5","ville":" BAS EN BASSET"},{"id":"6","ville":"BEAULIEU"},{"id":"7","ville":"BEAUZAC"},{"id":"8","ville":"BRIOUDE"},{"id":"9","ville":" BRIOUDE"},{"id":"10","ville":"BRIOUDE"},{"id":"11","ville":" BRIVES CHARENSAC"},{"id":"12","ville":" BRIVES CHARENSAC"},{"id":"13","ville":" BRIVES CHARENSAC"},{"id":"14","ville":" BRIVES CHARENSAC"},{"id":"15","ville":"BRIVES CHARENSAC"},{"id":"16","ville":"COUBON"},{"id":"17","ville":"CRAPONNE"},{"id":"18","ville":"DUNI\u00c8RES"},{"id":"19","ville":"CRAPONNE"},{"id":"20","ville":"DUNI\u00c8RES"},{"id":"21","ville":"ESPALY"},{"id":"22","ville":"GRAZAC"},{"id":"23","ville":"LANGEAC"},{"id":"24","ville":"LANGEAC"},{"id":"25","ville":" LANTRIAC"},{"id":"26","ville":"LAPTE"},{"id":"27","ville":"LAUSSONNE"},{"id":"28","ville":" LAVOUTE CHILHAC"},{"id":"29","ville":"LE MONASTIER"},{"id":"30","ville":"LE MONASTIER"},{"id":"31","ville":"MONISTROL\/LOIRE"},{"id":"32","ville":"MONISTROL\/LOIRE"},{"id":"33","ville":"MONISTROL\/LOIRE"},{"id":"34","ville":"MONTFAUCON"},{"id":"35","ville":" MONTREGARD"},{"id":"36","ville":"POLIGNAC"},{"id":"37","ville":"PRADELLES"},{"id":"38","ville":"LE PUY EN VELAY"},{"id":"39","ville":"LE PUY EN VELAY"},{"id":"40","ville":"LE PUY EN VELAY"},{"id":"41","ville":"LE PUY EN VELAY"},{"id":"42","ville":"LE PUY EN VELAY"},{"id":"43","ville":"LE PUY EN VELAY"},{"id":"44","ville":"VALS PRES LE PUY"},{"id":"45","ville":"LE PUY EN VELAY"},{"id":"46","ville":"LE PUY EN VELAY"},{"id":"47","ville":"LE PUY EN VELAY"},{"id":"48","ville":"LE PUY EN VELAY"},{"id":"49","ville":"RAUCOULES"},{"id":"50","ville":"LE PUY EN VELAY"},{"id":"51","ville":"RETOURNAC"},{"id":"52","ville":"RIOTORD"},{"id":"53","ville":"ROSIERES"},{"id":"54","ville":"ST BONNET LE FROID"},{"id":"55","ville":"ST DIDIER EN VELAY"},{"id":"56","ville":"ST DIDIER EN VELAY"},{"id":"57","ville":"ST FERREOL D\u2019AUROURE"},{"id":"58","ville":"SAINT FRONT"},{"id":"59","ville":"ST GERMAIN LAPRADE"},{"id":"60","ville":"STE FLORINE"},{"id":"61","ville":"STE FLORINE"},{"id":"62","ville":"ST JULIEN CHAPTEUIL"},{"id":"63","ville":"ST JULIEN CHAPTEUIL"},{"id":"64","ville":"ST JUST MALMONT"},{"id":"65","ville":"ST MAURICE DE LIGNON"},{"id":"66","ville":"ST PAL\/CHALENCON"},{"id":"67","ville":"ST PAL DE MONS"},{"id":"68","ville":"SAINT PAULIEN"},{"id":"69","ville":"ST PIERRE D\/CHAMP"},{"id":"70","ville":"ST ROMAIN LACHALM"},{"id":"71","ville":"STE SIGOL\u00c8NE"},{"id":"72","ville":"STE SIGOL\u00c8NE"},{"id":"73","ville":"ST VICTOR MALESCOURS"},{"id":"74","ville":"SAUGUES"},{"id":"75","ville":"SAUGUES"},{"id":"76","ville":"LA SEAUVE S\/SEM\u00c8NE"},{"id":"77","ville":"SOLIGNAC\/LOIRE"},{"id":"78","ville":"TENCE"},{"id":"79","ville":"TENCE"},{"id":"80","ville":"TIRANGES"},{"id":"81","ville":"VERGEZAC"},{"id":"82","ville":"LES VILLETTES"},{"id":"83","ville":"VOREY"},{"id":"84","ville":"YSSINGEAUX"},{"id":"85","ville":"YSSINGEAUX "},{"id":"86","ville":"YSSINGEAUX "},{"id":"87","ville":"YSSINGEAUX"}] of type java.lang.String cannot be converted to JSONArray
05-02 14:50:20.548 11066-11066/com.example.nicol.etablissement43 W/System.err:     at org.json.JSON.typeMismatch(JSON.java:111)

enter image description here

相关问题