【问题标题】:plot ellipse in a seaborn scatter plot在 seaborn 散点图中绘制椭圆
【发布时间】:2017-10-16 03:45:23
【问题描述】:

我有一个 pandas 格式的数据框 (pd.DataFrame),其列 = [z1,z2,Digit],我在 seaborn 中做了一个散点图:

dataframe = dataFrame.apply(pd.to_numeric, errors='coerce')
sns.lmplot("z1", "z2", data=dataframe, hue='Digit', fit_reg=False, size=10)
plt.show()

我想要的是围绕这些点中的每一个绘制一个椭圆。但我似乎无法在同一个图中绘制椭圆。

我知道绘制椭圆的正常方法是:

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 = plt.subplot(111, aspect='equal')”,所以情节将在不同的图上。而我也做不到:

a = sns.lmplot("z1", "z2", data=rect, hue='Digit', fit_reg=False, size=10)
a.add_artist(elps)

因为 sns.lmplot() 返回的“a”属于“seaborn.axisgrid.FacetGrid”对象。有什么解决办法吗?无论如何我可以绘制一个椭圆而不必像 a.set_artist() 这样的东西?

【问题讨论】:

    标签: python pandas matplotlib plot seaborn


    【解决方案1】:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多