- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 seaborn 通过 violinplots 可视化我的整个 Pandas 数据框,我认为我已经进行了必要的更正,以便为我的数据框拥有的 270 个变量生成一个大图。
但是,无论我做什么, fiddle 图都只显示每个变量的内部迷你箱线图(如另一个问题 here 所描述),而不是它们的 kde:
fig, ax = plt.subplots(figsize=(50,5))
ax.set_ylim(-6, 6)
a = sns.violinplot(x='variable', y='value', data=pd.melt(train_norm), ax=ax)
a.set_xticklabels(a.get_xticklabels(), rotation=90);
plt.savefig('massive_violinplot.png', figsize=(50,5), dpi=220)
(为裁剪图道歉,整个事情太大而无法发布)
而下面的代码,使用相同的 pd.Dataframe
,但只显示前六个变量,显示正确:
fig, ax = plt.subplots(figsize=(10,5))
ax.set_ylim(-6, 6)
a = sns.violinplot(x='variable', y='value', data=pd.melt(train_norm.iloc[:,:6]), ax=ax)
a.set_xticklabels(a.get_xticklabels(), rotation=90);
plt.savefig('massive_violinplot.png', figsize=(10,5), dpi=220)
我怎样才能得到所有变量的图表,如上图所示,并用适当的 fiddle 图显示它们的 kde?
最佳答案
这与变量的数量或图的大小无关,而是与变量分布的巨大差异有关。我现在无法访问您的数据,所以我将用一个编造的数据集来说明它。您可以跟随您的数据集,选择分散度较高的三个变量和分散度较小的三个变量。作为色散测量,您可以使用方差甚至数据范围(如果您没有疯狂的长尾)或其他不同的东西,我不确定哪个更好。
rs = np.random.RandomState(42)
data = rs.randn(100, 6)
data[:, :3] *= 20
df = pd.DataFrame(data)
看看如果我们用公共(public)轴绘制密度以便它们可以直接比较会发生什么。
df.plot(kind='kde', subplots=True, layout=(3, 2), sharex=True, sharey=True)
plt.tight_layout()
这与您在 seaborn fiddle 情节中看到的大致相同,但当然是换位了。
sns.violinplot(x='variable', y='value', data=pd.melt(df))
这通常非常适合比较变量,因为您可以将宽度差异视为密度差异。不幸的是,具有更多分散性的变量的 fiddle 非常窄,您根本看不到宽度并且您失去了任何形状感。另一方面,离散度较小的变量看起来太短(实际上在您的数据集中,其中一些只是水平线)。
对于第一个问题,您可以通过使用 scale='width'
让 fiddle 使用所有可用的水平空间,但您无法再比较变量之间的密度。峰宽相同但密度不同。
sns.violinplot(x='variable', y='value', data=pd.melt(df), scale='width')
顺便说一下,这是 matplotlib 的 fiddle 图默认情况下所做的。
plt.violinplot(df.T)
对于第二个问题,我认为你唯一的选择是以某种方式规范化或标准化变量。
sns.violinplot(x='variable', y='value', data=pd.melt((df - df.mean()) / df.std()))
现在您可以更清楚地分别查看每个变量(它们有多少模式、它们的偏斜程度、尾部有多长...),但您既不能比较变量的比例,也不能比较变量之间的离散度。
这个故事的寓意是您无法一次看到所有内容,您必须根据要在数据中查找的内容进行挑选。
关于python - Seaborn:Violinplot 遇到变量太多的困难?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56350531/
有没有办法为 violinplot 添加均值和模式?我的其中一列中有分类数据,下一列中有相应的值。我尝试查看 matplotlib fiddle 图,因为它在技术上提供了我正在寻找的功能,但它不允许我
试图弄清楚如何修改 seaborn violinplot 中四分位数的线条属性(颜色、粗细、样式等)。 来自他们网站的示例代码: import seaborn as sns sns.set(style
我想使用 seaborn 通过 violinplots 可视化我的整个 Pandas 数据框,我认为我已经进行了必要的更正,以便为我的数据框拥有的 270 个变量生成一个大图。 但是,无论我做什么,
我想使用 seaborn 通过 violinplots 可视化我的整个 Pandas 数据框,我认为我已经进行了必要的更正,以便为我的数据框拥有的 270 个变量生成一个大图。 但是,无论我做什么,
我正在尝试根据计数数据在 R 中创建 fiddle 图。我使用的数据是在每个来源的每个样本中发现的一些突变。 看起来像这样: 2 Source1 8 Source2 0 Source1 1 Sourc
我正在尝试绘制分开的 fiddle ,以在色调变量上比较它们。绘图本身工作正常,但我希望更改色调变量的顺序(即“True”位于分割的左侧而不是右侧)。一个小的工作示例是这样的: import pand
在布置 fiddle 图时,是否有一种简单的方法可以忽略零计数类别。在下面的示例中,没有 'Yes:Red' 和 'No:Green' 的情况,但 violinplot 仍然绘制“缺失”类别。我明白为
我正在使用 seaborn 制作 violinplot,它使用色调来确定谁幸存,谁没有幸存。这是由“DEATH_EVENT”列给出的,其中 0 表示该人幸存,1 表示他们没有。我遇到的唯一问题是我不知
require(ggplot2) require(cowplot) d = iris ggplot2::ggplot(d, aes(factor(0), Sepal.Length)) + ge
过去几周我一直在使用 matplotlib,学习如何制作不同的图表等。我目前处于静止状态。我正在处理基因表达数据,因此我有一个 csv 文件,其中包含 3 列数据(突变、移码和非突变)。但是,我正在尝
我想将中位数和智商值添加到 fiddle 图中。但是,我没有找到它的论据。 import seaborn as sns sns.set_theme(style="whitegrid") tips =
我正在使用提示数据集,这里是数据集的头部。 total_bill tip sex smoker day time size 0 16.99 1.01 Female N
我正在从四个不同类别的单独文件中读取数据,并且想为那些使用 fiddle 图的人可视化文件的分布。在我的尝试中,它们似乎被覆盖了 import seaborn as sb # category1, c
我正在尝试更改 Seaborn 中 fiddle 的边缘颜色。下面的代码对我有用。 ax=sns.violinplot(data=df, x="#", y="SleepAmount", hue="Th
我有一些代码以 fiddle 图的形式表达选举结果的平衡: plt.plot((0, 0), (0.85, 1.15), 'k-') p = plt.violinplot(np.array(resul
我有以下ggplot2 violinplot library(ggplot2)
在我最近发现 seaborn 之前,我曾经使用 matplotlib 创建我的所有绘图。我发现特别有趣的是,它允许您拆分 fiddle 以便比较给定的 hue 变量。 嗯,我的主要问题是我不知道我必须
我正在尝试创建显示均值置信区间的 fiddle 图。我认为一个简单的方法是在 fiddle 图的顶部绘制一个点图,但这不起作用,因为它们似乎对 x 轴使用了不同的索引,如本例所示: import ma
我有一个包含多列的数据框,我可以轻松地使用 seaborn 将其绘制在箱线图(或 fiddle 图等)中,如下所示: data1 = {'p0':[1.,2.,5,0.], 'p1':[2., 1.,
我是一名优秀的程序员,十分优秀!