我的目标是比较各种社会经济因素(如多年收入)的分布情况,以了解人口在特定地区的演变情况,例如5年多.这方面的主要数据来自Public Use Microdata Sample.我使用R+ ggplot2作为我的首选工具.
在比较两年的数据(2005年和2010年)时,我有两个数据框hh2005和两年hh2010的家庭数据.两年的收入数据存储hincp在两个数据框的变量中.使用ggplot2我将创建个别年份的密度图如下(2010年的例子):
p1 <- ggplot(data = hh2010, aes(x=hincp))+
geom_density()+
labs(title = "Distribution of income for 2010")+
labs(y="Density")+
labs(x="Household Income")
p1
Run Code Online (Sandbox Code Playgroud)
如何在此图上叠加2005年的密度?我无法弄清楚data因为hh2010我不知道如何继续阅读.我应该从一开始就以一种根本不同的方式处理数据吗?
我试图在 R 中绘制一个直方图并用来自不同分布的密度覆盖它。它适用于常规直方图,但我无法让它与 ggplot2 包一起使用。
a <- dataset$age
Run Code Online (Sandbox Code Playgroud)
现在遵循我的常规直方图的代码:
Histogram_for_age <- hist(a, prob=T, xlim=c(0,80), ylim=c(0,0.055), main="Histogram for age with density lines", xlab="age")
mean <- mean(a)
sd <- sd(a)
Run Code Online (Sandbox Code Playgroud)
现在是密度的线/曲线:
lines(density(dataset$age), col="blue", lwd=2, lty=1)
curve(dnorm(x, mean = mean, sd = sd), add = T, col="red", lwd=2, lty=2)
curve(dgamma(x, shape =mean^2/sd^2, scale = sd^2/mean), add = T, col="goldenrod", lwd=2, lty=3)
Run Code Online (Sandbox Code Playgroud)
和一个传说:
legend("topright",
c("actual distribution of age","gaussian distribution", "gamma distribution"),
lty=c(1,2,3),
lwd=c(2,2,2),col=c("blue","red","goldenrod"), cex=0.65)
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我在 ggplot2 上尝试过的:
ggplot(dataset, aes(x=age)) +
geom_histogram(aes(y=..density..),
colour="black", fill="white") + …Run Code Online (Sandbox Code Playgroud) 我有一个保存为 txt 文件的数组,其中的条目与极坐标中的分布值相对应。所以它看起来像这样:
f(r1,theta1) f(r1, theta2) ..... f(r1, theta_max)
f(r2,theta1) f(r2, theta2) ..... .
. .
. .
. .
f(r_max,theta1) .................f(r_max, theta_max)
Run Code Online (Sandbox Code Playgroud)
我想做一个 f 的密度图(f 越高,我想要的颜色越红)。有没有办法用 matplotlib 做到这一点?显式代码会有所帮助,因为我对此非常陌生。
我正在使用ggplot/easyGgplot2创建两组的密度图。我想要一个指标或指示两条曲线之间有多少交点。我什至可以使用没有曲线的任何其他解决方案,只要它允许我衡量哪些组更不同(几个不同的数据组)。
在 R 中有什么简单的方法可以做到这一点吗?
例如使用此示例,它生成此图
我如何估计两者共有的面积百分比?
ggplot2.density(data=weight, xName='weight', groupName='sex',
legendPosition="top",
alpha=0.5, fillGroupDensity=TRUE )
Run Code Online (Sandbox Code Playgroud) 我看过example1和如何在 R 中叠加密度图?和ggplot2 中关于如何制作密度图的重叠密度图。我可以使用第二个链接中的代码制作密度图。但是我想知道如何在ggplot或 中制作这样的图表plotly?我已经查看了所有示例,但无法解决我的问题。我有一个带有基因表达白血病数据描述的玩具数据框,其中的哪些列指的是两组个体
leukemia_big <- read.csv("http://web.stanford.edu/~hastie/CASI_files/DATA/leukemia_big.csv")
df <- data.frame(class= ifelse(grepl("^ALL", colnames(leukemia_big),
fixed = FALSE), "ALL", "AML"), row.names = colnames(leukemia_big))
plot(density(as.matrix(leukemia_big[,df$class=="ALL"])),
lwd=2, col="red")
lines(density(as.matrix(leukemia_big[,df$class=="AML"])),
lwd=2, col="darkgreen")
Run Code Online (Sandbox Code Playgroud) 我正在使用distplot()Seaborn的功能,我将两个密度图并置 - 每个在同一图中具有不同的颜色 - 我想标记它们。
我使用函数文档中提到的参数“标签”。
我的代码是:
Response4_mask = train_with_response['Response4'] == 1
not_Response4_mask = train_with_response['Response4'] != 1
plt.figure()
sns.distplot(a = train_imp_with_response[Response4_mask]['Family_Hist_4'], hist = True, color = 'red', label = 'Response4')
sns.distplot(a = train_imp_with_response[not_Response4_mask]['Family_Hist_4'], hist = True, label = 'not_Response4')
plt.title('Family_Hist_4')
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)
输出如下。里面没有标签:
我想得到一个结合了观测密度和累积分布函数的图。
通常的问题是两者的规模相差甚远。如何解决这个问题,即使用两个尺度,或者重新调整其中一个数据系列(最好在 ggplot 内,因为我想将数据的计算和显示分开)。
这是到目前为止的代码:
>dput(tmp)
产量
structure(list(drivenkm = c(8, 11, 21, 4, 594, 179, 19, 7, 10,
36)), .Names = "drivenkm", class = c("data.table", "data.frame"
), row.names = c(NA, -10L), .internal.selfref = <pointer: 0x223cb78>)
那我就做
p = ggplot(data = tmp, aes(x = drivenkm)) + geom_histogram(aes(y = ..density..), alpha = 0.2, binwidth = 3) + stat_ecdf(aes(x = drivenkm));
print(p)
我得到的是以下内容:

显然,天平相差甚远。如何解决这个问题,以便可以以合理的方式解释直方图和 cdf?
谢谢!
我目前正在绘制ggplot中许多回归模型的一些不同的第一个差异分布.为了便于解释差异,我想标记每个分布的2.5%和97.5%百分位数.由于我将做很多图,并且由于数据按二维(模型和类型)分组,我想在ggplot环境中定义和绘制各自的百分位数.使用facets绘制分布使我能够准确到达我想要的位置,除了百分位数.我当然可以手动完成这项工作,但理想情况下我希望找到一个我仍然可以使用的解决方案facet_grid,因为这样可以避免我在试图将不同的情节融合在一起时遇到很多麻烦.
以下是使用模拟数据的示例:
df.example <- data.frame(model = rep(c("a", "b"), length.out = 500),
type = rep(c("t1", "t2", "t2", "t1"),
length.outh = 250), value = rnorm(1000))
ggplot(df.example, aes(x = value)) +
facet_grid(type ~ model) +
geom_density(aes(fill = model, colour = model))
Run Code Online (Sandbox Code Playgroud)
我试图以两种方式添加分位数.第一个产生错误消息:
ggplot(df.example, aes(x = value)) +
facet_grid(. ~ model) +
geom_density(aes(fill = model, colour = model)) +
geom_vline(aes(x = value), xintercept = quantile(value, probs = c(.025, .975)))
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Error in quantile(value, probs = c(0.025, 0.975)) : object 'value' not found
而第二个获取完整变量的分位数而不是子密度.也就是说,绘制的分位数对于所有四个密度是相同的. …
我在 ggplot2 中创建了直方图,我想将其与相同数据的密度线重叠。重要的是,我不想将直方图转换为密度值,而是想在 y 轴上保留 N(数字)。有没有什么方法可以在不转换直方图的情况下重叠直方图和密度图,而是放大密度曲线?
该数据的直方图:

相同数据的初始密度图:

所需的叠加,但 Y 轴上有密度而不是计数:

我正在尝试制作一个图形,该图形的底部有密度图,密度图上方有相应的箱线图。我的密度图和箱线图由分类变量填充/着色。我想不出一种方法让箱线图高于密度图并且也被躲避。这是我到目前为止能够得到的:
d <- mtcars
d$cyl <- as.factor(d$cyl)
fig <- ggplot(data = d) +
geom_density(aes(x = mpg, fill = cyl),
position = "dodge",
na.rm = TRUE) +
geom_boxplot(aes(x = mpg, color = cyl),
position = ggstance::position_dodgev(height = 1),
width = .05, show.legend = FALSE,
na.rm = TRUE) +
facet_grid(~am, scales = "free_x") +
scale_fill_brewer(palette = "Set2") +
scale_color_brewer(palette = "Set2") +
theme_minimal() +
guides(color = FALSE, fill = FALSE)
fig
Run Code Online (Sandbox Code Playgroud)

但是,正如您所看到的,这不会将箱线图均匀地移动到密度图上方。我也用过
geom_boxplot(aes(x = mpg, color = cyl),
position = position_nudge(x = …Run Code Online (Sandbox Code Playgroud)