标签: violin-plot

对于geom_violin,如何指定所有小提琴的总面积?

在对的调用geom_violinggplot2,您可以通过指定来指定每个小提琴的面积与组成该小提琴的观察次数成正比scale="count"

我假设这是在内部进行操作的,方法是取一些总面积(我们称此数量X),并将其按比例分配给所有要绘制的小提琴。这就是我想要的,除了如果组之间的N差异足够大,从而导致某些组的N相对较低,这会导致小提琴非常狭窄。在我的情况下,这只会使填充色很难看清。

我认为,至少在我的情况下,可以简单地将X稍微扩展一点,从而使很小的小提琴具有足够的可读性,从而在很大程度上解决该问题。换句话说,我想根据观察次数保留小提琴之间的面积差异,但要增加小提琴之间分配的总面积的“池”,以使每个小提琴变得更大。

任何人都不知道如何实现这一目标?必须为此进行切换。我试着用大惊小怪参数geom_violin,如widthsizeviolinwidth,等,但至今没有运气...

编辑:编码一个无聊但可重现的“样本”数据集,供人们进行试验。

y = runif(100, 1, 10)
x = as.factor(rep(c(1,2), times=50))
z = as.factor(c(rep(1, 10), rep(2, 90)))
df=data.frame(x, y, z)
ggplot(df, aes(x=x, y=y, fill=z)) + geom_violin(scale="count")
Run Code Online (Sandbox Code Playgroud)

r ggplot2 violin-plot

5
推荐指数
1
解决办法
1425
查看次数

是否有可能用每组中的观察次数注释一个seaborn小提琴图?

我想用每组中的观察数量来注释我的小提琴情节.所以问题基本上与这个问题相同,除了:

  • python而不是R,
  • seaborn而不是ggplot,和
  • 小提琴情节而不是箱形图

让我们从Seaborn API文档中获取此示例:

import seaborn as sns
sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", data=tips)
Run Code Online (Sandbox Code Playgroud)

我希望在小提琴之上有n = 62,n = 19,n = 87,并且n = 76.这可行吗?

python plot seaborn violin-plot

5
推荐指数
1
解决办法
2018
查看次数

更新后的Seaborn盒子图破了0.6.0

我最近将我的seaborn从0.5.1更新到新的0.6.0版本.我一直在使用seaborn在python笔记本中制作盒子图和小提琴图,现在我似乎无法使我的代码工作了.Matplotlib plt.boxplot仍然适用于我的数据.特别是,当我有一组列表或数组,其中子集的大小不同时,似乎会出现问题.

例如:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
x = np.array([1,3,4]), ([1,2])
plt.boxplot(x) #this works



 import numpy as np
 import matplotlib.pyplot as plt
 import seaborn as sns
 x = np.array([1,3,4]), ([1,2])
 sns.boxplot(x) #doesn't work
Run Code Online (Sandbox Code Playgroud)

这是我尝试seaborn box plot时得到的错误

ValueError:boxplot统计信息列表和`position`值必须具有相同的长度

在新的seaborn教程中,它说sns.boxplot应该采取一切措施plt.boxplot.有没有人有同样的更新问题?有没有办法使这项工作?如果没有,有没有办法安装0.6.0版本和0.5.1版本并在某些笔记本电脑中调用特定版本?

matplotlib boxplot seaborn violin-plot

4
推荐指数
1
解决办法
2742
查看次数

不能使海边小提琴情节水平[Python3.X]

使用Seaborn,我可以创建一个.使其垂直是没有问题的.但我想要一个水平的小提琴情节.我看到建议violinplot函数中传递参数时只需切换x和y .

我希望获得相同的小提琴曲线,旋转90度,并且只能通过切换x和y来实现这一点.这是一个简单的例子:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
categories = pd.Series(['2008', '2008', '2008', '2009', '2009' ])
values     = pd.Series(np.random.normal(0,1, 5))
sns.violinplot( x=categories, y=values, linewidth=5)
plt.show()
sns.violinplot( y=categories, x=values, linewidth=5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

这两张图.第一个是垂直小提琴情节,这是预期的.但第二个不是类似的水平小提琴情节.调用第二个绘图的命令出了什么问题?

在此输入图像描述

matplotlib python-3.x pandas seaborn violin-plot

4
推荐指数
1
解决办法
511
查看次数

如何在小提琴图上显示胡须和点?

我有一个df包含以下数据的数据框。我想绘制logCPM两组 A 和 B 之间基因的表达。

Samples  Type   GeneA
Sample1    B    14.82995162
Sample2    B    12.90512275
Sample3    B    9.196524783
Sample4    A    19.42866012
Sample5    A    19.70386922
Sample6    A    16.22906914
Sample7    A    12.48966785
Sample8    B    15.53280377
Sample9    A    9.345795955
Sample10    B   9.196524783
Sample11    B   9.196524783
Sample12    B   9.196524783
Sample13    A   9.434355615
Sample14    A   15.27604692
Sample15    A   18.90867329
Sample16    B   11.71503095
Sample17    B   13.7632545
Sample18    A   9.793864295
Sample19    B   9.196524783
Sample20    A   14.52562066
Sample21    A   13.85116605
Sample22    A   9.958492229
Sample23    A …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 violin-plot ggpubr

4
推荐指数
1
解决办法
1249
查看次数

使用 ggplot 创建多个堆叠的小提琴图

我有一个在不同景观上运行的模型,一次同时运行,一次单独运行。我想在小提琴图中绘制结果,但我希望在同一个图中并排运行,并且每个景观都有自己的小提琴(所以2 堆 4 把小提琴)。示例数据:

df1 <- data.frame('means' = 1:6, 'landscape' = rep(c('forest', 'desert', 3)))
df2 <- data.frame('means' = rep(c(1,2), 3), 'landscape' = rep(c('forest', 'desert', 3)))
Run Code Online (Sandbox Code Playgroud)

我希望最终产品看起来如何(MS Paint 中的插图,我是一个糟糕的艺术家): 在此处输入图片说明

绿色代表森林,金色代表沙漠。

r ggplot2 violin-plot

4
推荐指数
1
解决办法
615
查看次数

创建一个小提琴图的正确方法是什么,其中一把小提琴按色调分开?

创建一个小提琴图的正确方法是什么hue

我尝试了不同的方法,似乎唯一的方法是为数据集中的每个条目创建一个共享相同值的特征。并将该功能的名称作为x.

fig = plt.figure(figsize=(20, 8))

fig.add_subplot(1, 3, 1)
ax = sns.violinplot(x='feature', y='height',
              data=train_cleansed_height,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')

fig.add_subplot(1, 3, 2)
ax = sns.violinplot(x='workaround', y='height',
              data=train_cleansed_height,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')

fig.add_subplot(1, 3, 3)
ax = sns.violinplot(x=None, y='height',
              data=train_cleansed_height,
              scale='count',
              hue='feature', split=True,
              palette='seismic',
              inner='quartile')
plt.xlabel('x=None')
Run Code Online (Sandbox Code Playgroud)

小提琴情节示例

但这是正确的方法吗?

python matplotlib python-3.x seaborn violin-plot

3
推荐指数
1
解决办法
2644
查看次数

通过ggplot2抑制小提琴图中的散乱抖动点

以下用于在ggplot2中生成小提琴图:

ggplot(violin,aes(x=variable,y=log(value+0.5),color=Group)) + 
  geom_violin(scale="width") + 
  geom_jitter(aes(group=Group), position=position_jitterdodge()) + 
  stat_summary(fun.y="mean",geom="crossbar", mapping=aes(ymin=..y.., ymax=..y..), 
     width=1, position=position_dodge(),show.legend = FALSE) + 
  theme(axis.text.x = element_text(angle = 45, margin=margin(0.5, unit="cm")))
Run Code Online (Sandbox Code Playgroud)

得到的情节看起来如下;

在此输入图像描述

正如你所看到的,有些点在小提琴形状的边界外抖动,我需要把这些点放在小提琴里面.我玩过不同程度的抖动,但都取得了成功.我很欣赏任何能够实现这一目标的指示.

r ggplot2 violin-plot

3
推荐指数
3
解决办法
1265
查看次数

给定 numpy ndarray,随着时间的推移 Seaborn 小提琴图

我有一个随时间变化的分布,我想使用seaborn为每个时间并排绘制小提琴图。我最初尝试为失败violinplot无法处理np.ndarrayy参数:

import numpy as np
import seaborn as sns

time = np.arange(0, 10)
samples = np.random.randn(10, 200)

ax = sns.violinplot(x=time, y=samples)  # Exception: Data must be 1-dimensional
Run Code Online (Sandbox Code Playgroud)

seaborn文档有一个按分类变量分组的垂直小提琴图示例。但是,它使用长格式的 DataFrame。

我是否也需要将我的时间序列转换为 DataFrame?如果是这样,我如何实现这一目标?

python numpy time-series seaborn violin-plot

3
推荐指数
1
解决办法
370
查看次数

使用 Seaborn 和 Pandas Dataframe 绘制分割小提琴图很困难

我的数据框充满了我用来识别一组图像上的兴趣点的模型的可能性。行对应于图像,列对应于标签。标签有“左”和“右”版本。我想使用split=True关键字来显示同一小提琴图上的 L 和 R 侧。

我已经为标签“LH1”和“RH1”创建了单独的小提琴图,如下所示:

在此输入图像描述

但我试图用 5 把小提琴制作一个情节,左右分开。就像seaborn 的这个例子一样:

在此输入图像描述

Seaborn 需要一个hue参数,我想在我的例子中将是分类信息“左”或“右”。因此,我重组/重塑了我的数据框,删除了标签中的“L”或“R”前缀,并将信息添加为“手性”列下的类别。这大约是我目前所拥有的:

  df = pd.DataFrame.from_dict(
        {'H1': {0: 0.55, 1: 0.56, 2: 0.46, 3: 0.93, 4: 0.74, 5: 0.35, 6: 0.75, 7: 0.86, 8: 0.81, 9: 0.88},
         'H2': {0: 0.5, 1: 0.55, 2: 0.61, 3: 0.82, 4: 0.51, 5: 0.35, 6: 0.58, 7: 0.66, 8: 0.93, 9: 0.86},
         'H3': {0: 0.42, 1: 0.51, 2: 0.86, 3: 0.59, 4: 0.46, 5: 0.71, 6: 0.58, 7: 0.72, 8: 0.53, …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas seaborn violin-plot

3
推荐指数
1
解决办法
2267
查看次数