我正试图为多级分组箱图保留"空白空间".
set.seed(42)
n <- 100
dat <- data.frame(x=runif(n),
cat1=sample(letters[1:4], size=n, replace=TRUE),
cat2=sample(LETTERS[1:3], size=n, replace=TRUE))
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
Run Code Online (Sandbox Code Playgroud)
如果我强制其中一个组为空:
dat <- subset(dat, ! (cat1 == 'b' & cat2 == 'B'))
table(dat$cat1, dat$cat2)
##
## A B C
## a 9 9 7
## b 8 0 5
## c 13 11 6
## d 11 10 5
ggplot(dat, aes(cat1, x)) + geom_boxplot(aes(fill=cat2))
Run Code Online (Sandbox Code Playgroud)
第二组"b"现在扩展到填补空间.我想要的是:
SO 9818835(强制出现一个空的级别)在顶级工作正常,但我无法弄清楚如何使它适用于第二级别的类别.在scale_x_discrete(...),我尝试设置:
breaks=letters[1:4]breaks=LETTERS[1:3]breaks=list(letters[1:4], LETTERS[1:3]) (刺伤)breaks=NULLbreaks=func在哪里func <- function(x, …我想绘制数据框多列的箱线图。使用 R,我可以使用轴并设置不同的范围以按照我想要的方式显示绘图。但在 python 中,我只能有一个范围,不能为不同的列设置不同的范围。如何在 python 中绘制类似于 ggplot2 的箱线图?
我的代码片段如下。我还放了ggplot、seaborn和plotly的结果。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.read_excel('data-rta-3phase-boxplot.xlsx', header=0)
sns.boxplot(x="variable", y="value", data=pd.melt(df))
plt.show()
import plotly.graph_objects as go
fig = go.Figure()
for col in df:
fig.add_trace(go.Box(y=df[col].values, name=df[col].name))
fig.show()
Run Code Online (Sandbox Code Playgroud)
我想要的看起来像这样(用R中的ggplot2创建)
这些是我在plotly和seaborn中得到的
更新!!!!!
在社区的指导下,我成功创建了一个完全可控的代码来绘制箱线图。
import pandas as pd
import plotly.express as px
df = pd.read_excel('data-rta-3phase-boxplot.xlsx', header=0)
fig = px.box(df.melt(), y="value", facet_col="variable", boxmode="overlay", color="variable")
fig.update_yaxes(matches=None)
for i in range(len(fig["data"])):
yaxis_name = 'yaxis' if i …Run Code Online (Sandbox Code Playgroud) 我成功地使用该boxplot函数生成了... boxplots.现在我需要生成包含boxplot计算的统计数据的表,以便创建绘图.
我这样做是通过使用该plot=FALSE选项.
问题是,这会以一种相当奇怪的格式生成数据,而我根本无法做任何事情.这是一个例子:
structure(list(stats = structure(c(178.998262143545, 182.227431564442,
202.108456373209, 220.375358994654, 221.990406228232, 216.59986775699,
217.054997032148, 228.509462713206, 267.070720949859, 284.832378859975,
189.864120937198, 201.876421960518, 219.525439081472, 234.260088973545,
279.343359793024, 209.472617639903, 209.526516071858, 214.785213079737,
230.027361556731, 240.0647114578, 202.057148813419, 207.375619207685,
220.093663781351, 226.246698737471, 240.343646265795), .Dim = c(5L,
5L)), n = c(4, 6, 8, 4, 8), conf = structure(c(171.971593703341,
232.245319043076, 196.247705331772, 260.771220094641, 201.435457751239,
237.615420411705, 198.589545146688, 230.980881012787, 209.552007821332,
230.635319741371), .Dim = c(2L, 5L)), out = numeric(0), group = numeric(0),
names = c("U", "UM", "M", "LM", "L")), .Names = c("stats", …Run Code Online (Sandbox Code Playgroud) 我从各种数据集中得到了许多汇总统计数据:最大值,最小值,平均值,中位数等.我想绘制这些的箱形图 - 或者至少是类似的情节箱形图(我没有UQ和LQ统计数据,虽然有可能得到那些).
我没有原始数据,所以我不能只使用boxplotR中的函数.当你只有摘要统计时,有没有一种简单的方法在R中执行此操作?如果没有,是否有一种简单的方法可以使用其他免费工具执行此操作?
我有一个数据帧outcome2,我用以下方式生成一个分组的boxplot:
In [11]: outcome2.boxplot(column='Hospital 30-Day Death (Mortality) Rates from Heart Attack',by='State')
plt.ylabel('30 Day Death Rate')
plt.title('30 Day Death Rate by State')
Out [11]:
Run Code Online (Sandbox Code Playgroud)

我想做的是按照每个州的中位数对地块进行排序,而不是按字母顺序排序.不知道该怎么做.
我试图制作两个独立的情节,我想在我的海报中并排呈现(我需要将它们分开并且不能使用facet_wrap).其中一个地块有几个箱图,而第二个地块只有一个.我如何操纵箱形图的宽度,使得第二个箱形图与图1中任何一个单独的箱形图的宽度相同,当我将两个图并排放置时?一个可重复的例子:
tvalues <- sample(1:10000,1200)
sex <- c(rep('M',600),rep('F',600))
region <- c('R1','R2','R3','R4','R5')
df1 <- data.frame(tvalues,sex,region)
tvalues2 <- sample(1:10000,200)
sex2 <- sample(c('M','F'),200,replace=T)
region2 <- 'R6'
df2 <- data.frame(tvalues2,sex2,region2)
p1 <- ggplot(data=df1,aes(x=region,y=tvalues,color=sex)) +
geom_boxplot(width=0.5)
p2 <- ggplot(data=df2,aes(x=region2,y=tvalues2,color=sex2)) +
geom_boxplot(width=0.5)
Run Code Online (Sandbox Code Playgroud)
情节1

Plot2

我想合并分组的三个数据集,并获得只有两个框的图形,1表示A,1表示B.你能建议如何获得吗?
我正在尝试在R中创建一个分组的箱图.我有两组:A和B,在每组中我有3个子组,每个子组有5个测量值.
以下是我构建盒子图的方式,但如果有人有更好,更短或更简单的方法,我会很感激
A1 <- c(1,2,9,6,4)
A2 <- c(5,1,9,2,3)
A3 <- c(1,2,3,4,5)
B1 <- c(2,4,6,8,10)
B2 <- c(0,3,6,9,12)
B3 <- c(1,1,2,8,7)
DF <- data.frame(A1, A2, A3, B1, B2, B3)
boxplot(DF, col = rainbow(3, s = 0.5))
axis(side = 1, at = c(2,5), labels = c("A","B"))
legend("topleft", fill = rainbow(3, s = 0.5), legend = c(1,2,3), horiz = T)
Run Code Online (Sandbox Code Playgroud)
如何正确(组合)A和B中的框组合,并在我尝试时将轴标题固定为简单的A和B?
我喜欢类似的东西
从昨天开始,我正在阅读答案和网站,以便在一个图表中合并和对齐,histogram并boxplot使用ggplot2包生成.
这个问题与其他问题不同,因为boxplot chart需要减少在左边缘height和aligned左边缘histogram.
考虑以下数据集:
my_df <- structure(list(id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在seaborn中绘制箱线图,其宽度取决于x轴值的对数。我正在创建宽度列表并将其传递给 seaborn.boxplot 的 widths=widths 参数。
但是,我得到了
raise ValueError(datashape_message.format("widths"))
ValueError: List of boxplot statistics and `widths` values must have same the length
Run Code Online (Sandbox Code Playgroud)
当我调试和检查时,箱线图统计中只有一个字典,而我有 8 个箱线图。无法准确判断问题出在哪里。

我使用 pandas 数据框和seaborn 进行绘图。