标签: violin-plot

带颜色图的 matplotlib/seaborn 小提琴图

我想使用 matplotlib 或 Searborn 创建一个小提琴图,其中该图根据颜色图进行着色。

这就是我得到的:

在此输入图像描述

这就是我想要得到的(我在这里使用Photoshop): 在此输入图像描述

怎样才能得到想要的图呢?

python matplotlib seaborn colormap violin-plot

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

seaborn violinplot 中的最小值和最大值无效

我正在使用seaborn violinplot 绘制特定年份股票指数每日收益的分布。然而,图表上的一些极值看起来绘制不正确。

\n\n

下图是一年的示例。正如您所看到的,“Pi\xc4\x85tek\”的最低值接近 -6。

\n\n
sns.violinplot( x=wig20.iloc[1500:1751,3], y=wig20.iloc[1500:1751,2], width=1, order=[\'Poniedzia\xc5\x82ek\',\'Wtorek\',\'\xc5\x9aroda\',\'Czwartek\',\'Pi\xc4\x85tek\'])\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子

\n\n

数据看起来像:

\n\n
wig20.iloc[1500:1751,0:4].head()\n\n           Date      wig20     [%]       weekday\n1500    2016-01-04  1804.42 -2.943818   Poniedzia\xc5\x82ek\n1501    2016-01-05  1792.01 -0.687756   Wtorek\n1502    2016-01-07  1745.46 -2.597642   Czwartek\n1503    2016-01-08  1725.14 -1.164163   Pi\xc4\x85tek\n1504    2016-01-11  1703.78 -1.238160   Poniedzia\xc5\x82ek\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我检查数据时我可以看到

\n\n
wig20.iloc[1500:1751,2].min()\n\n-4.533610974747937\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此该图表完全具有误导性。在上面的图表中,“Pi\xc4\x85tek\”的低点肯定低于 -5。我检查了不同的年份,似乎每个大于 4 的最大/最小值都接近图表上的 6,我不知道为什么会这样。

\n

python matplotlib seaborn violin-plot

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

小提琴图以图解形式包含各个数据点

如何创建包含各个数据点的小提琴图?

下面的代码显示小提琴和彼此相邻的各个数据点;但是,我希望小提琴将这些点包围起来(洋红色箭头),而不是彼此相邻?

import plotly.express as px

df = px.data.tips()
fig = px.violin(df, y="total_bill", box=False, # draw box plot inside the violin
                points='all', # can be 'outliers', or False
               )
fig.show()
Run Code Online (Sandbox Code Playgroud)

小提琴情节

python plotly violin-plot

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

如何从字典中制作分组的小提琴图?

我想根据字典制作小提琴图。这是我的字典的示例,尽管我的实际字典有更多的患者和更多的值。

paired_patients={'Patient_1': {'n':[1, nan, 3, 4], 't': [5,6,7,8]},
                 'Patient_2': {'n':[9,10,11,12], 't':[14,nan,16,17]},
                 'Patient_3': {'n':[1.5,nan,3.5,4.5], 't':[5.5,6.5,7.5,8.5]}}
Run Code Online (Sandbox Code Playgroud)

对于每个患者,我希望有一组两个并排的小提琴图,一个'n'和一个用于't'. 我希望所有六个小提琴图都在同一个图上,共享 y 轴。

我正在尝试使用matplotlib violinplot,但我不确定如何在'dataset'选项中输入我的字典,也不知道如何按患者对'n'和进行分组't'

任何帮助将不胜感激!

python dictionary matplotlib seaborn violin-plot

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

如何用单独的置信区间分割小提琴图

我怎么能做出这样的小提琴人物呢?我想包括置信区间 在此输入图像描述 我可以使用下面的代码用四边形绘制分割图,但不能绘制均值和置信度。数据可以在这里找到。https://drive.google.com/file/d/18GrncA2GmJd38tVGZZ5yylR6Cf61XsGp/view?usp=sharing

import matplotlib.pyplot as plt
import seaborn as sns

sns.violinplot(x="six.categories", y="non_poor", hue="year", data=df, split=True,
               inner="quart", palette={"2019": "b", "2020": "y"})
sns.despine(left=True)

plt.xticks(np.arange(6),["Nonpoor\nWhite", "Poor\nWhite", "Poor\nBlack", "Nonpoor\nBlack", "Poor\nHispanic", "Nonpoor\nHispanic"])
Run Code Online (Sandbox Code Playgroud)

python seaborn violin-plot

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

pythonplotly小提琴图显示负尾

pythonplotly小提琴图显示负尾,但没有低于0的值。实际y轴在0到23之间(24小时间隔)。但小提琴图尾部超过 23 且小于 0(第 0 和第 23 边距级别添加到图表中)。

在此输入图像描述

代码:

fig = go.Figure()

fig.add_trace(go.Violin(x=df['Region'][ df['alarm_severity'] == 'CRITICAL' ],
                        y=df['OccurredTime'][ df['alarm_severity'] == 'CRITICAL' ],
                        legendgroup='CRITICAL', scalegroup='CRITICAL', name='CRITICAL',
                        line_color='blue')
             )

fig.add_trace(go.Violin(x=df['Region'][ df['alarm_severity'] == 'MAJOR' ],
                        y=df['OccurredTime'][ df['alarm_severity'] == 'MAJOR' ],
                        legendgroup='MAJOR', scalegroup='MAJOR', name='MAJOR',
                        line_color='red')
             )
fig.add_trace(go.Violin(x=df['Region'][ df['alarm_severity'] == 'WARNING' ],
                        y=df['OccurredTime'][ df['alarm_severity'] == 'WARNING' ],
                        legendgroup='WARNING', scalegroup='WARNING', name='WARNING',
                        line_color='green')
             )


fig.add_trace(go.Violin(x=df['Region'][ df['alarm_severity'] == 'MINOR' ],
                        y=df['OccurredTime'][ df['alarm_severity'] == 'MINOR' ],
                        legendgroup='MINOR', scalegroup='MINOR', name='MINOR',
                        line_color='orange')
             )



fig.update_traces(box_visible=True, meanline_visible=True )
fig.update_layout(violinmode='group',width=1000,
    height=600)



fig.show()
Run Code Online (Sandbox Code Playgroud)

python boxplot plotly violin-plot plotly-python

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

具有不同范围的分割小提琴图

我正在尝试使用seaborn中的分割小提琴图来绘制具有不同范围的两个变量。

这是我到目前为止所做的:

from matplotlib import pyplot as plt
import seaborn as sns
import numpy as np

df1 = pd.read_csv('dummy_metric1.csv')
df2 = pd.read_csv('dummy_metric2.csv')

fig, ax2 = plt.subplots()

sns.set_style('white')
palette1 = 'Set2'
palette2 = 'Set1'
colors_list = ['#78C850', '#F08030',  '#6890F0',  '#A8B820',  '#F8D030', '#E0C068', '#C03028', '#F85888', '#98D8D8']

ax1 = sns.violinplot(y=df1.Value,x=df1.modality,hue=df1.metric, palette=palette1, inner="stick")
xlim = ax1.get_xlim()
ylim = ax1.get_ylim()
for violin in ax1.collections:
    bbox = violin.get_paths()[0].get_extents()
    x0, y0, width, height = bbox.bounds
    violin.set_clip_path(plt.Rectangle((x0, y0), width / 2, height, transform=ax1.transData))
ax1.set_xlim(xlim)
ax1.set_ylim(ylim)
ax1.set_title("dummy")
ax1.set_ylabel("metric1")
ax1.set_xlabel("Modality") …
Run Code Online (Sandbox Code Playgroud)

python matplotlib seaborn violin-plot

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

为不同组创建小提琴图并使用两个不同的 y 轴

我目前有以下情节:

小提琴情节

问题是,由于短期小提琴图约为 -0.1,长期小提琴图约为 -0.5,因此图表的可读性远远低于应有的水平。因此,我想创建第二个 y 轴,连接到短期小提琴图。

我想使用两个不同的 y 轴创建小提琴图,同时在 x 轴上为多个标签绘制多个小提琴图。

我正在尝试创建一个小提琴情节。具体来说,对于 3 个不同的风险组,我想分别绘制长期和短期弹性的小提琴图(总共 6 个小提琴)。由于长期弹性与短期弹性的数量级不同,因此我想对长期和短期使用不同的 y 尺度。

这是我到目前为止所想到的:

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

np.random.seed(50)

# generate some random data
data1 = pd.DataFrame(np.random.normal(loc=0, scale=1, size=1000), columns=['Value'])
data2 = pd.DataFrame(np.random.normal(loc=5, scale=0.1, size=100), columns=['Value'])
data3 = pd.DataFrame(np.random.normal(loc=1, scale=1, size=1000), columns=['Value'])
data4 = pd.DataFrame(np.random.normal(loc=1, scale=0.1, size=100), columns=['Value'])
data5 = pd.DataFrame(np.random.normal(loc=2, scale=1, size=1000), columns=['Value'])
data6 = pd.DataFrame(np.random.normal(loc=2, scale=0.1, size=100), columns=['Value'])

# create the …
Run Code Online (Sandbox Code Playgroud)

python matplotlib seaborn violin-plot

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

ggplot 不尊重scale_fill_manual() 中的颜色顺序?

我正在创建一些小提琴图并想给它们上色。它适用于 9 维矩阵,如我之前的问题所示

ggplot小提琴图,按组指定不同的颜色?

但是当我将维度增加到 15 时,颜色的顺序就不受尊重了。为什么会发生这种情况?

它在这里工作(9 列):

library(ggplot2)
dat <- matrix(rnorm(250*9),ncol=9)

# Violin plots for columns
mat <- reshape2::melt(data.frame(dat), id.vars = NULL)

mat$variable_grouping <- as.character(sort(rep(1:9,250)))



pp <- ggplot(mat, aes(x = variable, y = value, fill = variable_grouping)) + 
  geom_violin(scale="width",adjust = 1,width = 0.5)  + scale_fill_manual(values=rep(c("red","green","blue"),3))
pp
Run Code Online (Sandbox Code Playgroud)

这里不起作用(15 列):

library(ggplot2)
dat <- matrix(rnorm(250*15),ncol=15)

# Violin plots for columns
mat <- reshape2::melt(data.frame(dat), id.vars = NULL)

mat$variable_grouping <- as.character(sort(rep(1:15,250)))



pp <- ggplot(mat, aes(x = variable, y = value, fill = variable_grouping)) …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 violin-plot

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

ggplot 用水平平均线分割小提琴图

我使用 ggplot 创建了这些半小提琴图。但是,我不想包含显示中位数的箱线图,而是包含一条带有平均值的水平线。这意味着每个彩色一半都有自己的平均线:金色一半的平均线不会与灰色一半的平均线完全对齐。重要的是,我希望平均线仅位于密度图中。我怎样才能实现这个目标?我无法弄清楚,我将不胜感激任何帮助!

以下是一些示例数据:

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)

这是 geom_violin 的扩展,用于创建 split_geom_violin:

GeomSplitViolin <- ggproto("GeomSplitViolin", GeomViolin, draw_group = function(self, data, ..., draw_quantiles = NULL){
  data <- transform(data, xminv = x - violinwidth * (x - xmin), xmaxv = x + violinwidth * (xmax - x))
  grp <- data[1,'group']
  newdata <- plyr::arrange(transform(data, x = if(grp%%2==1) xminv else xmaxv), if(grp%%2==1) y else -y)
  newdata …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 violin-plot

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