首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sns relplot的facetgrid中注释文本

在sns relplot的facetgrid中注释文本
EN

Stack Overflow用户
提问于 2020-01-17 01:12:10
回答 1查看 1.4K关注 0票数 0

使用以下数据帧(mx):

代码语言:javascript
复制
    code    Growth  Value   Risk    Mcap
0   APOLLOHOSP  8   6   High    small
1   ANUP    8   7   High    small
2   SIS 4   6   High    mid
3   HAWKINCOOK  5   2   Low mid
4   NEULANDLAB  6   4   Low large
5   ORIENTELEC  7   9   Low mid
6   AXISBANK    2   3   Medium  mid
7   DMART   4   1   Medium  large
8   ARVIND  2   10  Medium  small
9   TCI 1   7   High    mid
10  MIDHANI 5   5   Low large
11  RITES   6   4   Medium  mid
12  COROMANDEL  9   9   High    small
13  SBIN    10  3   Medium  large

dataframe

我正在尝试创建一个sns relplot,它应该在各自的facetgrid中注释散点图。然而,我得到的输出看起来像这样:

relplot

在这里,所有注释都出现在第一个facet中,而其他facet中的点没有任何注释。

我已经尝试了以下代码:

代码语言:javascript
复制
p1 = sns.relplot(x="Growth", y="Value", hue="Risk",col="Mcap",data=mx,s=200,palette = ['r','g','y'])
ax = p1.axes[0,0]
for idx,row in mx.iterrows():
    x = row[1]
    y = row[2]
    text = row[0]
    ax.text(x+0.5,y,text, horizontalalignment='left')

请告知修改的地方。提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-17 02:28:11

主要问题是您设置了ax = p1.axes[0,0],而ax应该设置为p1.axes[0,colum_number],这取决于文本必须转到的子图的列号。

此外,寻址row[0]row[1]等会降低代码的可读性,也不容易在发生变化时进行调整。因此,最好将行直接赋值给一些变量,就像在text, x, y, _risk, mcap = row中一样。更易维护的是itertuples()而不是iterrows(),如下面的代码所示。

为了给名字留出空间,你可以将x限制向右一点加宽。

代码语言:javascript
复制
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

data = [['APOLLOHOSP', 8, 6, 'High', 'small'],
        ['ANUP', 8, 7, 'High', 'small'],
        ['SIS', 4, 6, 'High', 'mid'],
        ['HAWKINCOOK', 5, 2, 'Low', 'mid'],
        ['NEULANDLAB', 6, 4, 'Low', 'large'],
        ['ORIENTELEC', 7, 9, 'Low', 'mid'],
        ['AXISBANK', 2, 3, 'Medium', 'mid'],
        ['DMART', 4, 1, 'Medium', 'large'],
        ['ARVIND', 2, 10, 'Medium', 'small'],
        ['TCI', 1, 7, 'High', 'mid'],
        ['MIDHANI', 5, 5, 'Low', 'large'],
        ['RITES', 6, 4, 'Medium', 'mid'],
        ['COROMANDEL', 9, 9, 'High', 'small'],
        ['SBIN', 10, 3, 'Medium', 'large']]
mx = pd.DataFrame(data=data, columns=["code", "Growth", "Value", "Risk", "Mcap"])

plotnum = {'small': 0, 'mid': 1, 'large': 2}
p1 = sns.relplot(x="Growth", y="Value", hue="Risk", col="Mcap", data=mx, s=200, palette=['r', 'g', 'y'])

for ax in p1.axes[0]:
    ax.set_xlim(0.0, max(mx["Growth"]) + 1.9)
for row in mx.itertuples():
    ax = p1.axes[0, plotnum[row.Mcap]]
    ax.text(row.Growth + 0.5, row.Value, row.code, horizontalalignment='left')
plt.show()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59774698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档