试图弄清楚如何修改 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)
结果:
我试图找到一种方法将某些数据值与连续颜色图中的特定颜色相关联。
我有一个值范围为 的特定图像[min, max],我希望以下值[min, q1, q2, q3, max](其中q'n'指四分位数)[0, 0.25. 0.5, 0.75. 1.0]与所选颜色图中对应的颜色相关联。结果,颜色放大器的中点将对应于图像中的中值,依此类推......
我一直在环顾四周,但我一直无法找到一种方法来做到这一点。
根据文档:
返回一组表达式值的近似边界,其中 number 表示要创建的分位数数。此函数返回一个由 number + 1 个元素组成的数组,其中第一个元素是近似最小值,最后一个元素是近似最大值。
听起来如果我想要真正的四分位数,我需要使用APPROX_QUANTILES(values, 4)which 将返回[minvalue, 1st quartile, 2nd quartile, 3rd quartile, maxvalue]
根据https://en.wikipedia.org/wiki/Quartile,四分位数集包含 3 个数据点 - 其中没有一个是数据的最小值/最大值。
我的假设正确吗?是APPROX_QUANTILES(values, 4)要返回真正的四分位?
这应该非常简单,但作为 SQL 的新手,我真的很挣扎。我被推荐对连续(非离散)数据使用 PERCENTILE_CONT。
有问题的数据涉及两列:(1) 患者列表的 ID 和 (2) 每年平均事件数。
使用我在网上找到的一些代码,这就是我要做的
SELECT ID,
percentile_cont (0.25) WITHIN GROUP
(ORDER BY PPPY ASC) OVER(PARTITION BY ID) as percentile_25,
percentile_cont (0.50) WITHIN GROUP
(ORDER BY PPPY ASC) OVER(PARTITION BY ID) as percentile_50,
percentile_cont (0.75) WITHIN GROUP
(ORDER BY PPPY ASC) OVER(PARTITION BY ID) as percentile_75
FROM AE_COUNT;
Run Code Online (Sandbox Code Playgroud)
这似乎只是报告了每列具有相同的 PPPY 值。
知道我哪里出错了吗?
我有下面的数据
eg_data <- data.frame(
period = c(sample( c("1 + 2"), 1000, replace = TRUE)),
max_sales = c(sample( c(1:10), 1000, replace = TRUE, prob =
c(.05, .10, .15, .25, .25, .10, .05, .02, .02, .01)))
Run Code Online (Sandbox Code Playgroud)
我想绘制scatter( jitter,实际上) 绘图并在沿 y 轴的不同点添加水平线。我希望能够自定义添加行的百分位数,但就目前而言,R 的汇总函数之类的东西可以正常工作。
summary(eg_data$max_sales)
Run Code Online (Sandbox Code Playgroud)
我有下面的抖动图代码。它运行并生成图形,但我不断收到错误消息:
每组仅包含一个观察值。你需要调整群体审美吗?
jitter <- (
(ggplot(data = eg_data, aes(x=period, y=max_sales, group = 1)) +
geom_jitter(stat = "identity", width = .15, color = "blue", alpha = .4)) +
scale_y_continuous(breaks= seq(0,12, by=1)) +
geom_line(stat = 'summary', fun.y = …Run Code Online (Sandbox Code Playgroud) 我试图理解 Pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。
test = pd.Series([7, 15, 36, 39, 40, 41])
test.describe()
Run Code Online (Sandbox Code Playgroud)
输出:
我只对 25% 和 75% 的百分位数感兴趣。我想知道大熊猫使用哪种方法来计算它们?
参考https://en.wikipedia.org/wiki/Quartile文章,结果不同如下:
那么pandas 用什么统计/数学方法来计算百分位数呢?
假设我有一张桌子
VAL PERSON
1 1
2 1
3 1
4 1
2 2
4 2
6 2
3 3
6 3
9 3
12 3
15 3
Run Code Online (Sandbox Code Playgroud)
我想计算每个人的四分位数.
我知道我可以很容易地为一个人计算这些:
SELECT
VAL,
NTILE(4) OVER(ORDER BY VAL) AS QUARTILE
WHERE PERSON = 1;
Run Code Online (Sandbox Code Playgroud)
会得到我想要的结果:
VAL QUARTILE
1 1
2 2
3 3
4 4
Run Code Online (Sandbox Code Playgroud)
问题是,我想为每个人这样做.我知道这样的事情会起作用:
SELECT
PERSON,
VAL,
NTILE(4) OVER(ORDER BY VAL) AS QUARTILE
WHERE PERSON = 1
UNION
SELECT
PERSON,
VAL,
NTILE(4) OVER(ORDER BY VAL) AS QUARTILE
WHERE PERSON = 2 …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
>>> import numpy as np
>>> l = [21,22,24,24,26,97]
>>> np.quantile(l, 0.25)
22.5
Run Code Online (Sandbox Code Playgroud)
文档说:
线性:i + (j - i) *fraction,其中fraction是i和j包围的索引的小数部分。
谁能解释一下是什么i,在这个例子中j以及fraction我们如何得到22.5?
我有一个值列表,我想绘制其分布图。我使用的是箱线图,但最好添加一些从箱线图四分位数到轴的虚线。另外,我只想在 x 刻度上显示四分位数值。这是一个粗略的想法,但最后是值而不是名称。
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
vel_arr = np.random.rand(1000,1)
fig = plt.figure(1, figsize=(9, 6))
ax = fig.add_subplot(111)
# Create the boxplot
ax.boxplot(vel_arr,vert=False, manage_ticks=True)
ax.set_xlabel('value')
plt.yticks([1], ['category'])
plt.show()
Run Code Online (Sandbox Code Playgroud) 我将一个名为gob的数据集加载到R中并尝试了方便的summary功能.值得注意的是,第三个四分位数小于平均值.怎么会这样?它是我的数据大小还是其他类似的东西?
我已经尝试为digits参数传递一个大值(例如10),但这并没有解决问题.
> summary(gob, digits=10)
customer_id 100101.D 100199.D 100201.D
Min. : 1083 Min. :0.0000000 Min. :0.0000000 Min. :0.0000000
1st Qu.: 965928 1st Qu.:0.0000000 1st Qu.:0.0000000 1st Qu.:0.0000000
Median :2448738 Median :0.0000000 Median :0.0000000 Median :0.0000000
Mean :2660101 Mean :0.0010027 Mean :0.0013348 Mean :0.0000878
3rd Qu.:4133368 3rd Qu.:0.0000000 3rd Qu.:0.0000000 3rd Qu.:0.0000000
Max. :6538193 Max. :1.0000000 Max. :1.0000000 Max. :0.7520278
Run Code Online (Sandbox Code Playgroud)
请注意,对于gob $ 100201.D,平均值为0.0000878,但是第3曲.= 0.
几个小时后,我被困在类似的东西上,并在一个Teradata查询中输出了一个不那么混乱的代码,用于输出25%,50%,75%的百分位数.可以进一步扩展以产生" 5点总结 ".根据您的人口估计值,最小和最大变化静态值.
有人要求优雅的方法.分享我的.
这是代码:
SELECT MAX(PER_MIN) AS PER_MIN,
MAX(PER_25) AS PER_25,
MAX(PER_50) AS PER_50,
MAX(PER_75) AS PER_75,
MAX(PER_MAX) AS PER_MAX
FROM (SELECT CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.01 AS INT) THEN DURATION_MACRO_CURR END AS PER_MIN,
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.25 AS INT) THEN DURATION_MACRO_CURR END AS PER_25,
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.50 AS INT) THEN DURATION_MACRO_CURR END AS PER_50 …Run Code Online (Sandbox Code Playgroud) 有谁能告诉我R中的分位数功能和HMISC包中的cut2功能之间的区别?
我知道分位数有9种不同的方法来指定四分位数.但是,当我使用函数cut2(mydata,g = 4)时,输出的四分位数不对应于任何分位数函数输出.
任何帮助非常感谢.
提前致谢.
quartile ×12
percentile ×4
python ×4
matplotlib ×3
r ×3
sql ×3
quantile ×2
boxplot ×1
data-science ×1
ggplot2 ×1
hmisc ×1
mean ×1
numpy ×1
oracle ×1
pandas ×1
ranking ×1
scatter-plot ×1
seaborn ×1
sql-server ×1
statistics ×1
teradata ×1
violin-plot ×1