我已经花了几个小时尝试做我认为是一个简单的任务,这是添加标签到一个XY图,而使用海运。
这是我的密码
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
df_iris=sns.load_dataset("iris")
sns.lmplot('sepal_length', # Horizontal axis
'sepal_width', # Vertical axis
data=df_iris, # Data source
fit_reg=False, # Don't fix a regression line
size = 8,
aspect =2 ) # size and dimension
plt.title('Example Plot')
# Set x-axis label
plt.xlabel('Sepal Length')
# Set y-axis label
plt.ylabel('Sepal Width')
我想在图上的每个点上添加"物种"列中的文本。
我见过很多使用matplotlib但不使用seaborn的例子。
有什么主意吗?谢谢。
5条答案
按热度按时间yduiuuwa1#
可以执行此操作的一种方法如下:
6ju8rftf2#
这里有一个更新的答案,它没有评论中描述的字符串问题。
c9qzyr3d3#
多亏了另外两个答案,这里有一个函数
scatter_text
,它可以多次重复使用这些图。按如下方式使用函数:
另请参阅关于如何使用返回图的函数的答案:https://stackoverflow.com/a/43926055/2641825
qacovj5a4#
下面是一个解决方案,它不使用可怕的for循环迭代数据框中的行。
在 Dataframe 上迭代有许多问题。
答案是**不要迭代!**请参见link。
下面的解决方案依赖于
petalplot
函数中的一个函数(plotlabel
),该函数由df.apply
调用。现在,我知道读者会对我使用
scatter
而不是lmplot
这一事实发表评论,但这有点离题。niknxzdl5#
Scott Boston的答案与此相同,但使用Seaborn v0.12+,您可以利用seaborn.FacetGrid.apply在图上添加标签,并一次性设置图形:
或者,如果你不需要使用
lmplot
,同样从v0.12开始,你可以使用seaborn.objects接口,这样我们就不需要手动迭代Iris Dataframe ,也不需要多次引用df_iris
或列名sepal_...
。一个二个一个一个
这将生成下图: