首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用海运FacetGrid自定义直方图

如何使用海运FacetGrid自定义直方图
EN

Stack Overflow用户
提问于 2022-05-11 05:54:59
回答 1查看 677关注 0票数 0

我使用海运的FacetGrid从参数"xyz“上的dataframe (plot_df)绘制多个直方图图。但我也想在这些情节里做一些额外的事情,

shade

  • Calculate
  1. 在x-值=0
  2. 处创建一条垂直轴线,将等于或小于0(在x轴上)的所有回收箱涂上不同的

,即仅在x轴上小于0的箱子的直方图百分比区域。

我可以在网上获得很多示例,但不能使用海运FacetGrid选项。

代码语言:javascript
复制
g = sns.FacetGrid(plot_df, col='xyz', height=5)```

g.map(plt.hist, "slack", bins=50)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-11 19:20:03

您可以循环遍历生成的轴(for xyz, ax in g.axes_dict.items(): ....),并为每个轴调用绘图函数。

或者,您可以使用自定义函数调用g.map_dataframe(...)。该函数将需要使用“当前ax”。

更改x和y标签,需要在调用g.map_dataframe()之后进行,因为在函数的末尾,海运会擦除x和y标签。

您可以调用plt.setp(g.axes, xlabel='data', ylabel='frequency')来设置所有子图的标签。或者g.set_ylabels('...')只为“外部”子图设置y标签。

下面是一些让您开始的示例代码:

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

def individual_plot(**kwargs):
     ax = plt.gca()  # get the current ax
     data = kwargs['data']['slack'].values
     xmin, xmax = data.min(), data.max()
     bin_width = xmax / 50
     # histogram part > 0
     ax.hist(data, bins=np.arange(0.000001, xmax + 0.001, bin_width), color='tomato')
     # histogram part < 0
     ax.hist(data, bins=-np.arange(0, abs(xmin) + bin_width + 0.001, bin_width)[::-1], color='lime')
     # line at x=0
     ax.axvline(0, color='navy', ls='--')
     # calculate and show part < 0
     percent_under_zero = sum(data <= 0) / len(data) * 100
     ax.text(0.5, 0.98, f'part < 0: {percent_under_zero:.1f} %',
             color='k', ha='center', va='top', transform=ax.transAxes)

# first generate some test data
plot_df = pd.DataFrame({'xyz': np.repeat([*'xyz'], 1000),
                        'slack': np.random.randn(3000) * 10 + np.random.choice([10, 500], 3000, p=[0.9, 0.1])})

g = sns.FacetGrid(plot_df, col='xyz', height=5)
g.map_dataframe(individual_plot)
plt.setp(g.axes, xlabel='data', ylabel='frequency')

plt.tight_layout()
plt.show()

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

https://stackoverflow.com/questions/72196032

复制
相关文章

相似问题

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