我已经开始使用并喜欢绘制箱线图来表示我的数据。然而,我很难找到一种方法来对比这两个群体。使用Plotly时有没有办法引入数据之间的统计显着性比较?我想创建这样的图表:
其中 * 对应于 p 值 < 0.05,ns(不显着)对应于 p 值 > 0.05。我发现使用scipy.stats.ttest_ind()and stats.ttest_ind_from_stats()one 可以轻松找到两个分布的 p 值。
我在网上没有找到任何相关的帖子,我认为这是一个相当有用的实现,所以任何帮助将不胜感激!
我有一个plotly.graph_objects.Box图,我正在显示箱形图中的所有点。我需要根据数据的属性为标记着色(如下所示)。我还想抖动这些点(下面未显示)。
使用Box我可以绘制点并抖动它们,但我不认为我可以为它们着色。
fig.add_trace(go.Box(
name='Data',
y=y,
jitter=0.5,
boxpoints='all',
))
Run Code Online (Sandbox Code Playgroud)
为了给图上色,我为每组添加了一条单独的迹线Scatter。它看起来像这样(伪代码):
for data in group_of_data:
fig.add_trace(go.Scatter(
name=f'{data.name}',
x=['trace 0', 'trace 0', ..., 'trace 0'],
y=data.values,
marker=dict(color=data.color),
mode='markers',
))
Run Code Online (Sandbox Code Playgroud)
值得注意的是,该x值是绘图的文本标签Box。我在问题中发现:是否可以在plotly.js箱形图上叠加标记?。
现在我可以通过一起使用go.Scatter+以正确的颜色绘制散点覆盖图go.Box,但由于我的x值是文本标签(将它们与绘图对齐Box),我不知道如何向Scatter绘图添加抖动。通常,您可以向值添加随机值x以使散点图抖动,但是当x是文本标签时我不能。
我找到了这个链接,我试图了解boxplot是如何工作的.
http://pandas.pydata.org/pandas-docs/dev/visualization.html#box-plotting
df = DataFrame(np.random.rand(10,5))
plt.figure();
bp = df.boxplot()
Run Code Online (Sandbox Code Playgroud)
我希望boxplot每个盒子需要4个值,但是它似乎为每个10个点构建一个盒子,我想知道背景中发生了什么.
我指的四点是晶须高,低,盒高,低
谢谢
我试图添加变量名称(即x,y和z)作为每个boxplot的标题:
bpdf = data.frame(group=c("A","A","A","B","B","B","C","C","C"),
x=c(1,1,2,2,3,3,3,4,4),
y=c(7,5,2,9,7,6,3,1,2),
z=c(4,5,2,9,8,9,7,6,7))
par(mfrow=c(1,3))
lapply(bpdf[-1],function(x){
y <- sort(tapply(x,bpdf$group,median),decreasing=TRUE)
boxplot(x~factor(bpdf$group,levels=names(y)),
main=paste(colnames(bpdf[-1])))
})
Run Code Online (Sandbox Code Playgroud)
我在main电话中遗漏了一些东西(以前的帮助).
我有以下代码:
x = rnorm(30, 1, 1)
c = c(rep("x1",10), rep("x2",10), rep("x3",10))
df = dataframe(x,c)
boxplot(x ~ c, data=df)
Run Code Online (Sandbox Code Playgroud)
它很棒.但如果我决定不再对看到x3感兴趣,请删除它,并重新绘制:
dfMod = subset(df, c %in% c("x1", "x2"))
boxplot(x ~ c,data=dfMod)
Run Code Online (Sandbox Code Playgroud)
boxplot仍然显示x3的列.

香港专业教育学院尝试使用boxplot提示
boxplot(x~c,data=dfMod, names = c("x1", "x2"))
Run Code Online (Sandbox Code Playgroud)
但这会引发名称大小不正确的错误.在此先感谢您的帮助
我已经绘制了分组的箱形图,现在我想用白线代替标准的黑色中线,同时保持边框为另一种颜色.我正在按照Minimalist Boxplots网站上的说明进行操作,因为我非常喜欢他们的风格.
他们使用命令stat_summary(geom = "crossbar", width=0.65, fatten=0, color="white", fun.data = function(x){ return(c(y=median(x), ymin=median(x), ymax=median(x))) }).该命令适用于简单的箱形图:

但是现在我正在尝试在我的分组箱图上使用它,它不再工作了(缺少白色中线):
这是我复制数据的代码:
Data <- data.frame(
W = sample(1:100),
M = sample(1:100),
A = sample(1:100),
O = sample(1:100),
Type = sample(c("1", "2", "3", "4", "5")))
Run Code Online (Sandbox Code Playgroud)
我的剧本:
Data_Boxplot <- melt(Data,id.vars='Type', measure.vars=c('W','M','A', 'O'))
Boxplots <- ggplot(Data_Boxplot, aes(Type, value, group=variable)) +
geom_boxplot(outlier.colour = NULL, aes(color=variable, fill=variable)) +
stat_summary(geom = "crossbar", width=0.65, fatten=0, color="white",
fun.data = function(x){c(y=median(x), ymin=median(x), ymax=median(x))})
Boxplots
Run Code Online (Sandbox Code Playgroud)
我需要改变什么?非常感谢您的帮助.
我需要改变使用pandas效用函数绘制的箱线图的颜色.我可以使用color参数更改大多数属性,但无法弄清楚如何更改facecolor框.有人知道怎么做吗?
import pandas as pd
import numpy as np
data = np.random.randn(100, 4)
labels = list("ABCD")
df = pd.DataFrame(data, columns=labels)
props = dict(boxes="DarkGreen", whiskers="DarkOrange", medians="DarkBlue", caps="Gray")
df.plot.box(color=props)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用类似于此问题中描述的连接线创建一个简单的箱线图:使用线和多个因子连接ggplot箱图.但是,该示例中的交互术语会产生错误:
geom_path:每组只包含一个观察.你需要调整群体美感吗?
我想使用索引变量连接每个点.这是代码:
group <- c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B")
session <- c("one","two","one","two","one","two","one","two","one","two","one","two","one","two","one","two","one","two","one","two")
value <- c(1.02375,1.01425,1.00505,0.98105,1.09345,1.09495,0.98255,0.90240,0.99185,0.99855,0.88135,0.72685,0.94275,0.84775,1.01010,0.96825,0.85215,0.84175,0.89145,0.86985)
index <- c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10)
df <- data.frame(group,session,value,index)
# Graph plots
p <- ggplot(df, aes(x=group, y=value, fill=session))
p <- p + geom_boxplot(color="grey40", outlier.alpha=0.0) #alpha=0.6
p <- p + stat_summary(fun.y=mean,geom="point",pch="-",color="white",size=8, position = position_dodge(width=0.75)) # size=2 color="black"
p <- p + geom_point(size=2, alpha=0.6, aes(group=session), data=df, position = position_dodge(width=0.75))
p <- p + geom_line(aes(group = index), alpha = 0.6, colour = "black", position = position_dodge(width=0.75), data=df) #
p <- p + …Run Code Online (Sandbox Code Playgroud) boxplot ×10
r ×5
python ×3
ggplot2 ×2
pandas ×2
plotly ×2
axis-labels ×1
d3.js ×1
dataframe ×1
lapply ×1
matplotlib ×1
nvd3.js ×1
p-value ×1
statistics ×1
stripplot ×1