标签: violin-plot

Seaborn 中小提琴图的范围不准确

由于某些原因,绘图的范围不准确。在我的数据中没有负值。

在此输入图像描述

当我将范围设置为 -100 到 100 时,分布的某些部分低于 0 标记。

在此输入图像描述

python matplotlib kernel-density seaborn violin-plot

6
推荐指数
1
解决办法
1698
查看次数

如何在小提琴图中为每个组分配不同的位置

小提琴图的形状对于可视化分组数据的数据分布很有用。每组的大小也可以可视化为“小提琴”的面积。

\n

但是当数据是异构的\xef\xbc\x8c时,width某些组的数据太小而无法显示任何有意义的信息(图1中的Fri组)。可以选择width放大seaborn.violinplot绘图的大小。

\n

然而,一旦小规模的群体扩大到合适的规模,大群体就会变得“太大”(图2中的Sat群体)并相互重叠。

\n

因此,我的问题是如何为seaborn中的小提琴图分配不同的间隙距离。

\n
\n

演示

\n
\n

生成图 1 的代码:

\n
import seaborn as sns\n\ntips = sns.load_dataset("tips")\nax = sns.violinplot(x="day", y="total_bill", hue="sex",\n                    data=tips, palette="Set2", split=True,\n                    scale="count", inner="stick",\n                    scale_hue=False, bw=.2)\n
Run Code Online (Sandbox Code Playgroud)\n

图1

\n

图。1

\n

生成图2的代码:

\n
import seaborn as sns\n\ntips = sns.load_dataset("tips")\nax = sns.violinplot(x="day", y="total_bill", hue="sex",\n                    data=tips, palette="Set2", split=True,\n                    scale="count", inner="stick", width=2.5\n                    scale_hue=False, bw=.2) \n
Run Code Online (Sandbox Code Playgroud)\n

图2

\n

图2

\n
\n

你的解决方案是什么?

\n
\n
    \n
  • 第一次尝试是增加图形宽度,但它看起来很糟糕,并且在图形中留下太多空白。

    \n
  • \n
  • 我尝试将 x 轴上的类别数据映射为数字形式,并且它们之间的距离不同。 …

python matplotlib pandas seaborn violin-plot

6
推荐指数
1
解决办法
3568
查看次数

matplotlib - 带有空列表的 violinplot ValueError

当我尝试使用 matplotlib 绘制“小提琴图”时,出现以下 ValueError 错误。

ValueError:零大小数组到没有身份的缩减操作最小值

axes[0].violinplot([[1,2,3],[],[2,3,4]])
Run Code Online (Sandbox Code Playgroud)

我希望在左侧和右侧绘制两个小提琴图,并在中间绘制一些东西来代表无效项目。

我应该怎么做才能克服这个问题?

python matplotlib violin-plot

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

对于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在同一张图上绘制两个小提琴图系列?

查阅有关seaborn的violon 的文档,我想知道如何在同一轴上绘制两个系列的小提琴图(点1),并且它们是可比较的(点2)。

关于第1点,我想复制每种性别的情节:

fig, ax = plt.subplots()
sns.violinplot(x="day", y="total_bill", hue="smoker",
                    data=tips, split=True, ax=ax)
Run Code Online (Sandbox Code Playgroud)

我可以在两个子图上做到这一点:

fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(211)
sns.violinplot(x="day", y="total_bill", hue="smoker",
               data=tips[tips.sex == "Female"], split=True, ax=ax)

ax = fig.add_subplot(212)
sns.violinplot(x="day", y="total_bill", hue="smoker",
               data=tips[tips.sex == "Male"], split=True, ax=ax)
Run Code Online (Sandbox Code Playgroud)

我想在相同的matplotlib轴上绘制两个小提琴图系列。

另一点是关于小提琴图的宽度。我不清楚小提琴是否已标准化以及如何标准化?我假设宽度是为每个图计算的。在上面的示例中,为第一个子图计算了女性的宽度,为第二个子图计算了男性的宽度。因此,我可以直接比较密度吗?我想我可以比较这些形状,但是,例如,我不能比较星期一的男性吸烟者和女性的吸烟者数量?有没有办法管理小提琴的标准化?

python matplotlib seaborn violin-plot

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

强制小提琴图不显示零值上的小提琴

我有几个组的测量值,我想将它们绘制为小提琴图:

set.seed(1)
df <- data.frame(val = c(runif(100,1,5),runif(100,1,5),rep(0,100)),
                 group = c(rep("A",100),rep("B",100),rep("C",100)))
Run Code Online (Sandbox Code Playgroud)

使用Rggplot2

library(ggplot2)
ggplot(data = df, aes(x = group, y = val, color = group)) + geom_violin()
Run Code Online (Sandbox Code Playgroud)

我得到: 在此输入图像描述

R但是当我尝试使用's获得等效值时plotly

library(plotly)
plot_ly(x = df$group, y = df$val, split = df$group, type = 'violin', box = list(visible = F), points = F, showlegend = T, color = df$group)
Run Code Online (Sandbox Code Playgroud)

我得到: 在此输入图像描述

“C”组获得一把充气/人造小提琴。

知道如何处理这个问题而不是使用 吗ggplotly

r plotly violin-plot

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

将意大利面条图(带有分组变量)与 ggplot2 中的分裂小提琴(没有它)相结合

这是一个最小的可重现示例:

library(ggplot2)


mydata <- data.frame(condition = c(rep("One",40), rep("Two",40)),
                     participant = rep(1:40,2),
                     observation = c(rnorm(40,2,1), rnorm(40,0,1)))

#my.plot <- ggplot(mydata, aes(x=condition, y=observation, group=participant)) +
my.plot <- ggplot(mydata, aes(x=condition, y=observation)) +
  geom_point(size=3) +
  geom_line(size=1, alpha=0.5) +
  xlab('condition') +
  ylab('Observation') 

dataDensity <- mydata %>%
  group_by(condition) %>%
  do(data.frame(loc = density(.$observation)$x,
                dens = density(.$observation)$y,
                participant=1))

dataDensity$dens <- ifelse(dataDensity$condition == "One", .9+(dataDensity$dens * -1), 2.1+(dataDensity$dens))
my.plot + geom_polygon(data = dataDensity, aes(dens, loc, fill = condition))
Run Code Online (Sandbox Code Playgroud)

这给了我以下情节: 在此处输入图片说明

这接近我想要的,但不完全。我实际上想将条件“一”和“二”之间的每个对应点对分组。因此,当我添加分组变量时(就像我在上面的代码片段中注释掉的行一样),我遇到了这个问题:

在此处输入图片说明

这很有趣,但不是我所追求的。

我必须添加 hack/workaroundparticipant=1以防止出现错误消息:

FUN(X[[i]], ...) 中的错误:找不到对象“参与者”

如何将分散的点与分组变量相结合,但保持分离的小提琴独立?

(注意:第一个图中的垂直线只是因为我有 …

r ggplot2 violin-plot

5
推荐指数
0
解决办法
329
查看次数

阴影小提琴图按组

我正在尝试在R中产生一组小提琴图的变体(最好使用ggplot2),类似于以下示例:

分组的小提琴图

由以下可重现的示例代码产生:

# Load libraries #
library(tidyverse)

# Create dummy data #
set.seed(321)
df <- data.frame(X = rep(c("X1", "X2"), each = 100), 
                 Y = rgamma(n = 200, shape = 2, rate = 2),
                 Z = rep(c("Za", "Zb"), rep = 100),
                 stringsAsFactors = FALSE)

# Grouped violin plot #
df %>% 
  ggplot(., aes(x = X, y = Y, fill = Z)) + 
    geom_violin(draw_quantiles = 0.5) + 
    scale_fill_manual(values = c("Za" = "red", "Zb" = "blue"))
Run Code Online (Sandbox Code Playgroud)

我想拥有的变化是,中位数以上的密度与中位数以下的密度应具有不同的阴影,如下图所示:

阴影小提琴图

我使用以下代码为组合X …

r ggplot2 violin-plot

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

Seaborn小提琴图透明度

我希望在 seaborn.violinplot 中有越来越透明的小提琴。我尝试了以下方法:

import seaborn as sns

tips = sns.load_dataset("tips")

ax = sns.violinplot(x="day", y="total_bill", data=tips, color='r', alpha=[0.8, 0.6, 0.4, 0.2])
Run Code Online (Sandbox Code Playgroud)

Which does not result in the desired output:

在此处输入图片说明

python seaborn violin-plot

5
推荐指数
2
解决办法
2093
查看次数

标签 统计

violin-plot ×10

python ×6

seaborn ×5

matplotlib ×4

r ×4

ggplot2 ×3

kernel-density ×1

pandas ×1

plot ×1

plotly ×1