猿问

如何在seaborn的“岭图”处向轴标签添加单位

我想根据 seaborn 'ridge plot' 示例(https://seaborn.pydata.org/examples/kde_ridgeplot.html)执行以下操作:


我想将单位添加到 x 轴的 x 标签中,使其在图中显示为[m]中的x。我怎么做?将命令扩展g.map(label, "x")为g.map(label, "x in [m]")导致以下错误:KeyError: "['x [m]'] not in index"


我的代码如下:


import numpy as np

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

sns.set(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})



errorNames = ['Error 1 - abc.....',

              'Error 2 - abc.....',

              'Error 3 - abc.....',

              'Error 4 - abc.....',

              'Error 5 - abc.....',

              'Error 6 - abc.....',

              'Error 7 - abc.....',

              'Error 8 - abc.....',

              'Error 9 - abc.....',

              'Error 10 - abc.....',

              'Error 11 - abc.....',

              'Error 12 - abc.....',

              'Error 13 - abc.....']



# Create the data

rs = np.random.RandomState(1979)

x = rs.randn(650)

#g = np.tile(list("ABCDEFGHIJKLM"), 50)

g = np.tile(list(errorNames), 50)


df = pd.DataFrame(dict(x=x, g=g))

#m = df.g.map(ord)

#df["x"] += m


# Initialize the FacetGrid object

pal = sns.cubehelix_palette(10, rot=-.25, light=.7)

g = sns.FacetGrid(df, row="g", hue="g", aspect=15, height=.5, palette=pal)


# Draw the densities in a few steps

g.map(sns.kdeplot, "x", clip_on=False, shade=True, alpha=1, lw=1.5, bw=.2)

g.map(sns.kdeplot, "x", clip_on=False, color="w", lw=2, bw=.2)

g.map(plt.axhline, y=0, lw=2, clip_on=False)



#sns.plt.xlim(-10, 3)



# Define and use a simple function to label the plot in axes coordinates

def label(x, color, label):

    ax = plt.gca()

    ax.text(0, .2, label, fontweight="bold", color=color,

            ha="left", va="center", transform=ax.transAxes)


g.map(label, "x")

#g.map(label, "x [m]")


# Set the subplots to overlap 

# Erst hier wird geplotted

g.fig.subplots_adjust(hspace=-.25)



# Remove axes details that don't play well with overlap

g.set_titles("")

g.set(yticks=[])

g.despine(bottom=True, left=True)



翻阅古今
浏览 304回答 3
3回答

慕斯王

一种方法是使用g.axes. 然后获取数组中的最后一个轴并设置该轴的 xlabel:last_ax = g.axes.flat[-1]last_ax.set_xlabel("x in [m]")

红颜莎娜

只是一个附加说明,您可能希望将 pal 中的数量增加到 13 以保持颜色渐变。pal = sns.cubehelix_palette(13, rot=-.25, light=.7)

阿晨1998

只是玩弄轴对象g,我找到了一种简单且看似直接的方法来使用set_xlabels. 在这里阅读文档,感谢@DavidG 找到它。具体来说,set_xlabels([label]) 在网格的底行标记 x 轴。g.map(label, "x")g.set_xlabels('x in [m]')
随时随地看视频慕课网APP

相关分类

Python
我要回答