我需要为性别和种族(白色/非白色)的每个不同组合添加回归线。 这些是我制作的模型和图,但是我不知道在哪里放置这些线条以及如何做。
#Invoke-sqlcmd Connection string parameters
$params = @{'server'='TESTServer';'Database'='_Maintenance'}
#Server to query WMI class win32_logicalDisks
$server = 'TESTServer'
#Prepare Insert Statement
$insert = @'
INSERT INTO [_PBS_Maintenance].[dbo].[Maint_DiskSpace](Path,SizeInMB,SizeInGB,FileLastModified,CreatedDate,CreatedBY)
VALUES (
'{0}',
'{1}',
'{2}',
'{3}',
GetDate(),
SYSTEM_USER
)
'@
write-host $insert
Try {
#Define connction string of target database
$connectionString = 'Data Source=PBSNV800IMG1\PBSNV800IMG1;Initial Catalog=_PBS_Maintenance;Integrated Security=SSPI'
# connection object initialization
$conn = New-Object System.Data.SqlClient.SqlConnection($connectionString)
#Open the Connection
$conn.Open()
# Prepare the SQL
$cmd = $conn.CreateCommand()
$array= @()
$folder = "\\fsvr\Public\Users\Valorie L\Valorie\ATTORNEY\EIC-ERMG\"
$Source = $folder
Get-ChildItem -Recurse $Source | Where-Object { $_.PSIsContainer } |
ForEach-Object {
$obj = New-Object PSObject
$SizeMB = [Math]::Round((Get-ChildItem -Recurse $_.FullName | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB, 2)
$SizeGB = [Math]::Round((Get-ChildItem -Recurse $_.FullName | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1GB, 2)
$obj |Add-Member -MemberType NoteProperty -Name "Path" $_.FullName
$obj |Add-Member -MemberType NoteProperty -Name "SizeMB" $SizeMB
$obj |Add-Member -MemberType NoteProperty -Name "SizeGB" $SizeGB
$obj |Add-Member -MemberType NoteProperty -Name "DateModified" $_.LastWritetime
$array +=$obj
select Path,SizeMB,DateModified
ForEach-Object{
$cmd.CommandText = $insert -f $obj.Path,$obj.SizeMB,$obj.SizeGB, $obj.DateModified
$cmd.ExecuteNonQuery()
}
}
#Close the connection
$conn.Close()
}
Catch {
Throw $_
}
Invoke-Sqlcmd @params -Query "SELECT * FROM Maint_DiskSpace" | format-table -AutoSize
谢谢。
答案 0 :(得分:4)
geom_smooth
中的ggplot2
呼叫可以为您做到这一点:
library(tidyverse)
white_men <- 3 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)
white_women <- 2 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)
nonwhite_men <- 2.5 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)
nonwhite_women <- 1.5 * seq(20:40) + rnorm(n = 21, mean = 0, sd = 5)
df <-
white_men %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Male", race = "White") %>%
bind_rows(
white_women %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Female", race = "White")
) %>%
bind_rows(
nonwhite_men %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Male", race = "Non-White")
) %>%
bind_rows(
nonwhite_women %>% enframe(name = NULL) %>% mutate(age = 20:40, sex = "Female", race = "Non-White")
) %>%
mutate(sex_race = str_c(race, sex, sep = " "))
df %>%
ggplot(aes(x = age, y = value, color = sex_race)) +
geom_point() +
geom_smooth(method = "lm")
答案 1 :(得分:2)
尽管ggplot2
对于这种示例更为简洁,但如果您确实想使用R base plot
,我在这里提供了替代方法。
我使用了@ cardinal40制作的相同的df
:
> head(df)
value age sex race sex_race
1 -1.8812801 20 Male White White Male
2 -0.4755058 21 Male White White Male
3 13.3137759 22 Male White White Male
4 11.3594325 23 Male White White Male
5 13.3529303 24 Male White White Male
6 24.8443766 25 Male White White Male
对于绘图,可以使用for
循环遍历所有不同的组,使用abline
添加模型的回归线。
df = as.data.frame(df)
level = unique(df$sex_race)
colors = c("blue", "red", "green", "black")
for(i in 1:length(level))
{
if(i == 1)
{
plot(x = df[df$sex_race == level[i],"age"],
y = df[df$sex_race == level[i], "value"],
xlim = c(min(df$age), max(df$age)),
ylim = c(min(df$value), max(df$value)),
col = colors[i],
pch = 16,
xlab = "Age",
ylab = "Value")
abline(lm(value~age, data = subset(df, df$sex_race == level[i])),
col = colors[i])
}
else
{
points(x = df[df$sex_race == level[i],"age"],
y = df[df$sex_race == level[i], "value"],
col = colors[i], pch = 16)
abline(lm(value~age, data = subset(df, df$sex_race == level[i])),
col = colors[i])
}
}
legend("topleft", title="Legend", legend=c("White Male"," White Female", "Nonwhite Male", "Nonwhite Female"),
col=c("blue", "red", "green", "black"), pch=16, cex=0.54)
编辑:代码编写的替代方法
基于@StupidWolf的评论,您可以通过执行以下操作获得相同的情节:
df = as.data.frame(df)
level = unique(df$sex_race)
colors = c("blue", "red", "green", "black")
plot(NULL,
xlim = c(min(df$age), max(df$age)),
ylim = c(min(df$value), max(df$value)),
xlab = "Age", ylab = "Value")
for(i in 1:length(level))
{
points(x = df[df$sex_race == level[i],"age"],
y = df[df$sex_race == level[i], "value"],
col = colors[i], pch = 16)
abline(lm(value~age, data = subset(df, df$sex_race == level[i])),
col = colors[i])
}
legend("topleft", title="Legend", legend=c("White Male"," White Female", "Nonwhite Male", "Nonwhite Female"),
col=c("blue", "red", "green", "black"), pch=16, cex=0.54)
在此,感谢@rawr,这是一种更简洁的代码编写方式来获得相同的绘图:
sp <- split(df, df$sex_race)
plot(value ~ age, df, type = 'n', xlab = 'Age', ylab = 'Value')
lapply(seq_along(sp), function(ii) {
x <- sp[[ii]]
points(value ~ age, x, col = ii, pch = 16)
abline(lm(value ~ age, x), col = ii)
})
legend("topleft", title="Legend", legend=c("White Male"," White Female", "Nonwhite Male", "Nonwhite Female"),
col=c("blue", "red", "green", "black"), pch=16, cex=0.54)