标签: violin-plot

用ggplot2分割小提琴情节

我想用ggplot创建一个分裂小提琴密度图,就像seaborn文档的这个页面上的第四个例子一样.

这是一些数据:

set.seed(20160229)

my_data = data.frame(
    y=c(rnorm(1000), rnorm(1000, 0.5), rnorm(1000, 1), rnorm(1000, 1.5)),
    x=c(rep('a', 2000), rep('b', 2000)),
    m=c(rep('i', 1000), rep('j', 2000), rep('i', 1000))
)
Run Code Online (Sandbox Code Playgroud)

我可以像这样绘制躲闪的小提琴:

library('ggplot2')

ggplot(my_data, aes(x, y, fill=m)) +
  geom_violin()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是在视觉上比较并排分布中不同点的宽度很难.我无法在ggplot中找到任何拆分小提琴的例子 - 这可能吗?

我找到了一个基本的R图形解决方案,但功能很长,我想突出显示分布模式,这些模式很容易在ggplot中作为附加层添加,但如果我需要弄清楚如何编辑该功能将更难.

r ggplot2 violin-plot ggproto

37
推荐指数
2
解决办法
1万
查看次数

改变matplotlib小提琴图的颜色

有没有办法改变violinmatplotlib 中的图的颜色?

默认颜色是这种"褐色"颜色,这不是太糟糕,但我想要着色,例如,前3个小提琴不同以突出它们.我在文档中找不到任何参数.任何想法或黑客颜色不同的小提琴?

在此输入图像描述

python matplotlib violin-plot

18
推荐指数
2
解决办法
8545
查看次数

Python 中小提琴图在对数尺度上的问题

在我的绘图上使用对数刻度时,我的小提琴绘图显示奇怪的格式。我尝试过使用 matplotlib 和 seaborn,得到了非常相似的结果。

import matplotlib.pyplot as plt
import seaborn as sns

data = [[1e-05, 0.00102, 0.00498, 0.09154, 0.02009, 1e-05, 0.06649, 0.42253, 0.02062, 0.10812, 0.07128, 0.03903, 0.00506, 0.13391, 0.08668, 0.04127, 0.00927, 0.00118, 0.063, 0.18392, 0.05948, 0.07774, 0.14018, 0.0133, 0.00339, 0.00271, 0.05233, 0.00054, 0.0593, 1e-05, 0.00076, 0.03409, 0.71491, 0.02311, 0.10246, 0.12491, 0.05164, 0.1553, 0.01079, 0.01734, 0.02239, 0.1347, 0.02877, 0.04752, 0.00333, 0.04553, 0.03189, 0.00947, 0.00158, 0.00888, 0.12663, 0.07531, 0.12367, 0.11346, 0.06638, 0.06154, 1e-05, 0.1838, 0.08659, 0.05654, 0.07658, 0.0348, 0.02954, 0.0123, 0.01529, 0.05559, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib seaborn violin-plot

11
推荐指数
1
解决办法
7589
查看次数

seaborn violinplot 超出有效范围

我正在使用 seaborn 创建小提琴图。现在我正在创建不成比例的小提琴图(所以所有值都在 0 和 1 之间),但生成的小提琴图很不合适。它的底部范围为负值,其顶部范围为大于 1 的值。下面是我运行以测试它的示例:

import seaborn as sns
import numpy as np
y = np.asarray([.1725,.1825,.163,.1625,.93,.943,.893,.93,.11225,.93,.812,.832,.9425,.953,.8525,.993,.963,.1425,.113,.752])
x = np.asarray([1]*len(data))
sns.violinplot(x=x,y=y)
sns.plt.show()
Run Code Online (Sandbox Code Playgroud)

显然没有一个值超出范围 [0,1],但小提琴图看起来很奇怪:

超出范围的小提琴图

帮助将不胜感激!

python plot seaborn violin-plot

10
推荐指数
0
解决办法
3542
查看次数

使用 python 绘制正值小提琴图

我发现小提琴图信息丰富且有用,我使用 python 库“seaborn”。然而,当应用于正值时,它们几乎总是在低端显示负值。我发现这确实具有误导性,尤其是在处理现实数据集时。

在seaborn的官方文档中https://seaborn.pydata.org/ generated/seaborn.violinplot.html可以看到带有“total_bill”和“tip”的示例,它们不能负数。然而,小提琴图显示负值。例如,

import seaborn as sns
sns.set(style="whitegrid")
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", hue="smoker",data=tips, palette="muted", split=True)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我确实明白,这些负值来自高斯核。因此,我的问题是:有什么办法可以解决这个问题吗?python 中的另一个库?可以指定不同的内核吗?

python visualization data-analysis seaborn violin-plot

8
推荐指数
1
解决办法
5215
查看次数

seaborn violinplot 中的四分位数线属性

试图弄清楚如何修改 seaborn violinplot 中四分位数的线条属性(颜色、粗细、样式等)。

来自他们网站的示例代码:

import seaborn as sns

sns.set(style="whitegrid")

tips = sns.load_dataset("tips")

ax = sns.violinplot(x="day", y="total_bill", hue="sex",

                    data=tips, palette="Set2", split=True,linestyle=':',

                    scale="count", inner="quartile")
Run Code Online (Sandbox Code Playgroud)

带有四分位数的默认小提琴图

期望的结果是能够单独更改小提琴图的两个部分的颜色,例如像这样提高可读性:

期望输出

我怎样才能做到这一点?

感谢您的任何见解

更新:根据@kynnem 的响应,以下内容可用于分别更改中位数和四分位数线:

import seaborn as sns

sns.set(style="whitegrid")

tips = sns.load_dataset("tips")

ax = sns.violinplot(x="day", y="total_bill", hue="sex",

                    data=tips, palette="Set2", split=True,linestyle=':',

                    scale="count", inner="quartile")
for l in ax.lines:
    l.set_linestyle('--')
    l.set_linewidth(0.6)
    l.set_color('red')
    l.set_alpha(0.8)
for l in ax.lines[1::3]:
    l.set_linestyle('-')
    l.set_linewidth(1.2)
    l.set_color('black')
    l.set_alpha(0.8)
Run Code Online (Sandbox Code Playgroud)

结果:

小提琴修改线

python matplotlib seaborn quartile violin-plot

8
推荐指数
1
解决办法
1025
查看次数

将pandas数据帧处理成小提琴图

我有从Excel电子表格中读取的数据.该数据对于六种情景S1至S6中的每一种都有许多观察结果.当我将数据读入我的数据帧df时,它看起来如下:

      Scenario        LMP
0           S1 -21.454544
1           S1 -20.778094
2           S1 -20.027689
3           S1 -19.747170
4           S1 -20.814405
5           S1 -21.955406
6           S1 -23.018960
...
12258       S6 -34.089906
12259       S6 -34.222814
12260       S6 -26.712010
12261       S6 -24.555973
12262       S6 -23.062616
12263       S6 -20.488411
Run Code Online (Sandbox Code Playgroud)

我想创建一个小提琴图,它为六种场景中的每一种都有不同的小提琴.我是Pandas和数据框架的新手,尽管在最后一天进行了大量的研究/测试,我还是无法找到一种优雅的方法将一些参考传递给我的数据框(将它分成不同的系列用于每个场景)将在axes.violinplot()语句中工作.例如,我尝试了以下,但不起作用.我在我的axes.violinplot语句中得到一个"ValueError:无法将大小为1752的序列复制到维度为2的数组轴".

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# load data into a dataframe
df = pd.read_excel('Modeling analysis charts.xlsx',
                   sheetname='lmps',
                   parse_cols=[7,12],
                   skiprows=0,
                   header=1)

fontsize = 10

fig, axes = plt.subplots()

axes.violinplot(dataset = …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas seaborn violin-plot

7
推荐指数
2
解决办法
7116
查看次数

仅绘制小提琴图的一侧/一半

我想要只有一半的小提琴图(类似于 ggridges 的 stat_density_ridges 创建的图)。MWE

library(ggplot2)

dframe = data.frame(val = c(), group = c())
for(i in 1:5){
  offset = i - 3
  dframe = rbind(dframe, 
                 data.frame(val = rnorm(n = 50, mean = 0 - offset), group = i)
                 )
}
dframe$group = as.factor(dframe$group)

ggplot(data = dframe, aes(x = group, y = val)) + 
  geom_violin()      
Run Code Online (Sandbox Code Playgroud)

产生这样的情节

在此处输入图片说明

我虽然想要一个看起来像这样的:

在此处输入图片说明

理想情况下,这些图也可以缩放到宽度的 1.5 到 2 倍。

r ggplot2 violin-plot

7
推荐指数
1
解决办法
4241
查看次数

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
查看次数