每个直方图曲线下方的渐变填充-Python

问题描述 投票:0回答:1

我正在尝试使用seaborn facet grid将梯度填充与多个直方图合并在一起,其中梯度是由每条曲线下的值的散布确定的,而不仅仅是由rowcol的序列使用[C0 ]。下面有一些链接在python中部分执行一些类似的功能:

hue填充了一个发散梯度,但是每个直方图都独立于其他直方图,因此直方图之间的比较有些无效。使用下面的图,每个直方图应相对于其他直方图。此外,它不使用seaborn How to fill histogram with gradient color,这是此处的核心问题。

facet grid不会绘制直方图。它只是填充曲线下的区域。

我发现了一些显示我希望执行的图像,但它们似乎都是在How to generate series of histograms中生成的,而在python中却什么也没有。我的假设是使用seaborn尚不存在该功能,因此我必须使用R,但我认为这将适用于许多用户。

R

使用下面的代码,我们可以使用enter image description here将梯度更改为huerow,但这并不考虑曲线下的面积。

col

输出:

[可以为import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import numpy as np # Create the data rs = np.random.RandomState(1979) x = rs.randn(120) g = np.tile(list("ABCD"), 30) h = np.tile(list("XYZ"), 40) # Generate df df = pd.DataFrame(dict(x = x, g = g, h = h)) # Initialize the FacetGrid object pal = sns.cubehelix_palette(4, rot = -0.25, light = 0.7) g = sns.FacetGrid(df, col = 'h', hue = 'h', row = 'g', aspect = 3, height= 1, palette = pal) # Draw the densities g = g.map(sns.kdeplot, 'x', shade = True, alpha = 0.8, lw = 1, bw = 0.8) g = g.map(sns.kdeplot, 'x', color= 'w', lw = 1, bw = 0.8) g = g.map(plt.axhline, y = 0, lw = 1) # Adjust title and axis labels directly g.axes[0,0].set_ylabel('L 1') g.axes[1,0].set_ylabel('L 2') g.axes[2,0].set_ylabel('L 3') g.axes[3,0].set_ylabel('L 4') g.axes[0,0].set_title('Top 1') g.axes[0,1].set_title('Top 2') g.axes[0,2].set_title('Top 3') g.axes[1,0].set_title('') g.axes[1,1].set_title('') g.axes[1,2].set_title('') g.axes[2,0].set_title('') g.axes[2,1].set_title('') g.axes[2,2].set_title('') g.axes[3,0].set_title('') g.axes[3,1].set_title('') g.axes[3,2].set_title('') g.set_axis_labels(x_var = 'Total Amount') g.set(yticks = []) row设置一个渐变,但我希望将此渐变传递到每个直方图曲线下方的区域。与上图相似。因此,每条曲线下方的区域在小于零时将变亮,而在大于零时将变暗。

即使将曲线下的面积调整为中间值也足够。

col

python histogram seaborn gradient facet-grid
1个回答
3
投票

您可以创建图像渐变,并将直方图本身用作图像的剪切路径,以便唯一可见的部分是曲线下方的部分。

© www.soinside.com 2019 - 2024. All rights reserved.