我正在创建一个刻面图,以预测值与残差的图表并排查看预测值与实际值.我将shiny用于帮助探索使用不同训练参数的建模工作的结果.我用85%的数据训练模型,测试剩余的15%,并重复5次,每次收集实际/预测值.计算残差后,我的data.frame样子如下:
head(results)
act pred resid
2 52.81000 52.86750 -0.05750133
3 44.46000 42.76825 1.69175252
4 54.58667 49.00482 5.58184181
5 36.23333 35.52386 0.70947731
6 53.22667 48.79429 4.43237981
7 41.72333 41.57504 0.14829173
Run Code Online (Sandbox Code Playgroud)
我想要的是:
pred与act和pred对比residpred对act是相同的,理想地从min(min(results$act), min(results$pred))至max(max(results$act), max(results$pred))pred与resid 不被通过我做什么实际与预测的情节影响.x只绘制预测值并y仅绘制剩余范围就可以了.为了并排查看两个图,我将数据融化:
library(reshape2)
plot <- melt(results, id.vars = "pred")
Run Code Online (Sandbox Code Playgroud)
现在情节:
library(ggplot2)
p <- ggplot(plot, aes(x = pred, y = …Run Code Online (Sandbox Code Playgroud) 我在理解为什么日期,标签和中断的处理没有像我在R中尝试使用ggplot2进行直方图时所预期的那样有问题.
我在找:
%Y-b格式的日期标签我已将数据上传到pastebin以使其可重现.我创建了几个列,因为我不确定这样做的最佳方法:
> dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)
> head(dates)
YM Date Year Month
1 2008-Apr 2008-04-01 2008 4
2 2009-Apr 2009-04-01 2009 4
3 2009-Apr 2009-04-01 2009 4
4 2009-Apr 2009-04-01 2009 4
5 2009-Apr 2009-04-01 2009 4
6 2009-Apr 2009-04-01 2009 4
Run Code Online (Sandbox Code Playgroud)
这是我试过的:
library(ggplot2)
library(scales)
dates$converted <- as.Date(dates$Date, format="%Y-%m-%d")
ggplot(dates, aes(x=converted)) + geom_histogram()
+ opts(axis.text.x = theme_text(angle=90))
Run Code Online (Sandbox Code Playgroud)
这会产生这个图表.我想要%Y-%b格式化,所以我在周围搜索并尝试以下内容,基于此SO:
ggplot(dates, aes(x=converted)) + geom_histogram() …Run Code Online (Sandbox Code Playgroud) 我正在写一个Shiny应用程序,用于可视化我公司的保险福利计划.这是我想要发生的事情:
selectInput或sliderInput哪个用户将选择他们的医疗计划中的个人数量这是我当前的ui.R文件,带有硬编码输入,模拟一个四口之家:
shinyUI(pageWithSidebar(
headerPanel("Side by side comparison"),
sidebarPanel(
selectInput(inputId = "class", label = "Choose plan type:",
list("Employee only" = "emp", "Employee and spouse" = "emp_spouse",
"Employee and child" = "emp_child", "Employee and family" = "emp_fam")),
sliderInput(inputId = "ind1", label = "Individual 1",
min = 0, max = 20000, value = c(0, 2500), step = 250),
sliderInput(inputId = "ind2", label = "Individual 2",
min = 0, max = 20000, value = …Run Code Online (Sandbox Code Playgroud) 相关,但一般只讨论分配的绘图空间,而不是如何直接设置绘图图像大小然后缩放它以填充所需的空间
我正在创建一个闪亮的Web应用程序,并希望设置绘图和比例的大小.我的意思是我正在寻找一种方法来为我的绘图设置有限的高度/宽度,然后将设置大小的图像缩放到该mainPanel( plotOutput ())区域.
以此作为例子/类似情况shiny.
x <- 1:10
y <- x^2
png("~/Desktop/small.png", width = 600, height = 400)
plot(x, y)
dev.off()
png("~/Desktop/big.png", width = 1200, height = 800)
plot(x, y)
dev.off()
Run Code Online (Sandbox Code Playgroud)
我无法将图像上传到SO并设置大小,因此我将使用以下html包含每个的浏览器屏幕截图:
<img src="file:///home/jwhendy/Desktop/file.png" width = "800px" />
Run Code Online (Sandbox Code Playgroud)
这是我1600 x 900 px笔记本电脑上的全宽屏幕截图.
小

大

我想控制图像本身的大小,因为我ggplot2在使用类似的选项时会发现这些图例colour = var并且size = var非常小.注意读取大图片的轴标签的难度.我意识到我可能会遇到由于像素有限而无法很好地缩放图像尺寸的情况,但我认为在遇到这种情况之前我至少有一些旅行空间.
有什么建议?到目前为止我试过玩下面的内容,但没有运气:
shinyUI(pageWithSidebar(
headerPanel("Title"),
sidebarPanel(),
mainPanel(
plotOutput(outputId = "main_plot", width = "100%")) …Run Code Online (Sandbox Code Playgroud) 相关:字符串作为R中的变量引用
可能相关:将表达式连接到数据帧的子集
我根据评论请求简化了问题.这里有一些示例数据.
dat <- data.frame(num=1:10,sq=(1:10)^2,cu=(1:10)^3)
set1 <- subset(dat,num>5)
set2 <- subset(dat,num<=5)
Run Code Online (Sandbox Code Playgroud)
现在,我想从这些中制作一个泡泡图.我有一个更复杂的数据集,有3种颜色和复杂的子集,但我这样做:
symbols(set1$sq,set1$cu,circles=set1$num,bg="red")
symbols(set2$sq,set2$cu,circles=set2$num,bg="blue",add=T)
Run Code Online (Sandbox Code Playgroud)
我想像这样做一个for循环:
colors <- c("red","blue")
sets <- c("set1","set2")
vars <- c("sq","cu","num")
for (i in 1:length(sets)) {
symbols(sets[[i]][,sq],sets[[i]][,cu],circles=sets[[i]][,num],
bg=colors[[i]],add=T)
}
Run Code Online (Sandbox Code Playgroud)
我知道你可以通过评估变量来指定列(比如var="cu"; set1[,var];我想知道如何获取变量来指定data.frame本身(以及另一个来评估列).
更新:跑过这个职位上的R-博客拥有这个例子:
x <- 42
eval(parse(text = "x"))
[1] 42
Run Code Online (Sandbox Code Playgroud)
我现在可以这样做:
eval(parse(text=paste(set[[1]],"$",var1,sep="")))
Run Code Online (Sandbox Code Playgroud)
在摆弄这个问题时,我觉得有趣的是以下内容并不等同:
vars <- data.frame("var1","var2")
eval(parse(text=paste(set[[1]],"$",var1,sep="")))
eval(parse(text=paste(set[[1]],"[,vars[[1]]]",sep="")))
Run Code Online (Sandbox Code Playgroud)
我实际上必须这样做:
eval(parse(text=paste(set[[1]],"[,as.character(vars[[1]])]",sep="")))
Run Code Online (Sandbox Code Playgroud)
Update2:上面的工作是输出值...但不是在尝试绘图.我做不到:
for (i in 1:length(set)) {
symbols(eval(parse(text=paste(set[[i]],"$",var1,sep=""))),
eval(parse(text=paste(set[[i]],"$",var2,sep=""))),
circles=paste(set[[i]],".","circles",sep=""),
fg="white",bg=colors[[i]],add=T)
}
Run Code Online (Sandbox Code Playgroud)
我得到invalid symbol coordinates.我检查了set [[1]]的类,这是一个因素.如果is.numeric(as.numeric(set[[1]])) …
我很熟悉能够从R数据框(或矩阵)中提取列,如下所示:
df.2 <- df[, c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)
但是,可以使用一个!或其他工具来选择除列出的列之外的所有列吗?
对于背景,我有一个包含很多列向量的数据框,我想避免:
df.2 <- df[, c(1,3,5)]因为当我的.csv文件发生变化时,我的代码就变成了问题,因为编号不再相同了.我是R的新手,并且认为我已经学会了很难不使用数字向量来获得更大的df.我试过了:
df.2 <- df[, !c("name1", "name2", "name3")]
df.2 <- df[, !=c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)
正如我输入这个,发现这有效:
df.2 <- df[, !names(df) %in% c("name1", "name2", "name3")]
Run Code Online (Sandbox Code Playgroud)
有没有比上一个更好的方法?
ETA:顺便说一下,下面的要点是不必迭代我的整个列向量集,以防万一这是一个提议的解决方案(只做已知的工作一次一次).
有很多例子可以将R中数据帧的单个向量中的值替换为其他值.
以及如何NA用其他东西替换所有值:
我正在寻找的是类似于最后一个问题,但基本上试图用另一个值替换一个值.对于多列满足条件的情况生成映射到我的实际数据帧的逻辑值的数据帧,或者只是尝试从多个列的前两个问题执行操作,我遇到了问题.
一个例子:
data <- data.frame(name = rep(letters[1:3], each = 3), var1 = rep(1:9), var2 = rep(3:5, each = 3))
data
name var1 var2
1 a 1 3
2 a 2 3
3 a 3 3
4 b 4 4
5 b 5 4
6 b 6 4
7 c 7 5
8 c 8 5
9 c 9 5
Run Code Online (Sandbox Code Playgroud)
假设我要将所有的值,4在var1和var2是 …
我想做这个问题的反面,并且与这个问题相反,尽管这是关于传说,而不是情节本身.
其他SO问题似乎在询问如何保持未使用的因子水平.我实际上喜欢我的删除.我有几个名称变量和几个列(宽格式)的变量属性,我用它来创建多个条形图.这是一个可重复的例子:
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
Run Code Online (Sandbox Code Playgroud)
我明白了:

我只想在我的条形图中显示具有相应var n的名称(因为,B中没有空白空间).
如果我可以简单地更改输出文件名和y=var位,则重用基本绘图代码将非常容易.我希望不必对我的数据框进行子集,只是为了尽可能在每个绘图的结果上使用droplevels!
根据na.omit()建议更新
考虑修订的数据集:
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5), var3=c(NA,6,7))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
Run Code Online (Sandbox Code Playgroud)
我需要na.omit()用于绘图,var1因为存在NA.但是由于na.omit确保所有列都存在值,因此该图A也会删除,因为它具有NA var3.这更类似于我的数据.我总共响应了15个NAs.我只想删除没有当前绘制的y向量值的因子级别,而不是在整个数据帧中的任何向量中都有NA .
我有很多时间理解geom_bar()和position="dodge".我试图制作一些说明两组的条形图.最初的数据来自两个独立的数据框.根据这个问题,我将数据放在长格式中.我的例子:
test <- data.frame(names=rep(c("A","B","C"), 5), values=1:15)
test2 <- data.frame(names=c("A","B","C"), values=5:7)
df <- data.frame(names=c(paste(test$names), paste(test2$names)), num=c(rep(1,
nrow(test)), rep(2, nrow(test2))), values=c(test$values, test2$values))
Run Code Online (Sandbox Code Playgroud)
我使用该示例,因为它类似于支出与预算示例.支出每个names因素级别有很多行,而预算只有一个(每个类别一个预算金额).
对于堆积条形图,这非常有用:
ggplot(df, aes(x=factor(names), y=values, fill=factor(num))) +
geom_bar(stat="identity")
Run Code Online (Sandbox Code Playgroud)

特别要注意y值maxes.他们是数据从资金test与价值观test2上的蓝色的顶部.
根据我读过的其他问题,我只需要添加position="dodge"一个并排的情节而不是叠加的情节:
ggplot(df, aes(x=factor(names), y=values, fill=factor(num))) +
geom_bar(stat="identity", position="dodge")
Run Code Online (Sandbox Code Playgroud)

它看起来很棒,但请注意新的最大值.看起来它只是从y值中取每个名称因子级别的最大testy值.它不再是他们的总结.
根据其他一些问题(比如这个和这个问题,我也尝试添加group=选项但没有成功(产生与上面相同的躲闪情节):
ggplot(df, aes(x=factor(names), y=values, fill=factor(num), group=factor(num))) +
geom_bar(stat="identity", position="dodge")
Run Code Online (Sandbox Code Playgroud)
我不明白为什么堆叠工作得很好而且躲闪不只是将它们并排放在上面而不是顶部.
ETA:我在ggplot google小组上发现了一个关于此问题的最新问题,建议添加alpha=0.5以查看正在发生的事情.并不是ggplot从每个分组中获取最大值; 它实际上是为每个值过度绘制了彼此重叠的条形图. …
我实际上是使用orgmode导出,所以我的数据只是org-table形式; 那不应该.就像这样:
| Time | Video | Presentation | Paper |
|-------+-------+--------------+-------|
| 0 | 0 | 0 | 0 |
| 20 | 54 | 63 | 38 |
| 31.25 | 72 | 81 | 44 |
| 33. | 83 | 89 | 49 |
| 34. | 95 | 101 | 54 |
| 36.5 | 102 | 112 | 59 |
Run Code Online (Sandbox Code Playgroud)
这是为了工作,我正在绘制文件下载超过自提供后的小时数.我们努力在t = 28小时将人们指向这些文件,我想在那里找到一个与垂直线匹配的自定义标记,这样我就可以引起注意并在宣传工作之前和之后显示下载.因此,我的gnuplot代码如下所示:
set title "File Downloads"
set xlabel "Time Since Posting (hrs)"
set …Run Code Online (Sandbox Code Playgroud)