我有一个pandas格式的数据框(pd.DataFrame),列= [z1,z2,数字],我在seaborn中做了一个散点图:
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
elps = Ellipse((0, 0), 4, 2,edgecolor='b',facecolor='none')
a = plt.subplot(111, aspect='equal')
a.add_artist(elps)
plt.xlim(-4, 4)
plt.ylim(-4, 4)
plt.show()
我想要的是在每个点周围绘制一个椭圆。但我似乎无法在同一个图中绘制一个椭圆。
我知道绘制椭圆的正常方法如下:
a = sns.lmplot("z1", "z2", data=rect, hue='Digit', fit_reg=False, size=10)
a.add_artist(elps)
但是因为我必须做“a = plt.subplot(111,aspect ='equal')”,所以情节将是不同的数字。我也做不到:
CasperError: Cannot get informations from input[name="email"]: element not found.
/home/casper/casperjs/phantomjs:/platform/casper.js:1158 in getElementInfo
/home/casper/casperjs/phantomjs:/platform/casper.js:1721 in sendKeys
/home/casper/casperjs/phantomjs:/code/cars.js:9
/home/casper/casperjs/phantomjs:/platform/casper.js:1685 in runStep
/home/casper/casperjs/phantomjs:/platform/casper.js:414 in checkStep
因为sns.lmplot()返回的'a'是“seaborn.axisgrid.FacetGrid”对象。有解决方案吗无论如何我可以绘制一个椭圆,而不必像a.set_artist()?
答案 0 :(得分:2)
Seaborn's lmplot()使用FacetGrid
对象来制作图,因此您的变量a = lm.lmplot(...)
是对该FacetGrid
个对象的引用。
要添加椭圆,您需要对Axes
对象进行反射。问题是FacetGrid可以包含多个轴,具体取决于您分割数据的方式。值得庆幸的是,有一个函数FacetGrid.facet_axis(row_i, col_j)
可以返回对特定Axes
对象的引用。
在你的情况下,你会这样做:
a = sns.lmplot("z1", "z2", data=rect, hue='Digit', fit_reg=False, size=10)
ax = a.facet_axis(0,0)
ax.add_artist(elps)