如何在ggplot2中删除x和y轴下方的绘图区域(参见下面的示例).我已经尝试了几个主题元素(panel.border,panel.margin,plot.margin)没有任何运气.
p <- ggplot(mtcars, aes(x = wt, y = mpg,xmin=0,ymin=0)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

目标是摆脱刻度线和条形底部之间的空间,而不会切除条形另一端之外的任何百分比标签.
我使用R的ggplot2运行了几十个条形图,并尝试遵循我们的组织风格指南,该指南是使用Excel手动为每个图形开发的.最大长度条在不同的图形中具有不同的长度,并且可能随着源数据的变化而变化,因此我不想手动设置限制.[也许这里有一个解决方法:有没有办法根据输入自动调整限制?]
我已经咨询过:
http://docs.ggplot2.org/dev/vignettes/themes.html
几乎可以工作的图形由以下代码生成.出于公共目的,我正在使用MASS包中的"quine"数据集.首先,我发现按年龄分组的女性百分比.然后我按女性百分比订购年龄组.
require(MASS)
attach(quine)
p.SexAge <- prop.table(table(Sex, Age), 2)
perc.SexAge <- round(p.SexAge * 100)
perc.SexAge.flattened <- as.data.frame(perc.SexAge)
perc.SexAge.flattened.F <- subset(perc.SexAge.flattened, Sex == "F")
require(ggplot2)
ggplot(data=perc.SexAge.flattened.F, aes(x=reorder(Age, -Freq), y=Freq)) +
geom_bar(stat="identity", fill = "#00ABE1") +
scale_x_discrete(expand = c(0, 0)) +
scale_y_continuous(expand = c(0,6)) +
ggtitle("Percent Female By Age") +
ylab("Percent Female") +
xlab("Age Group\n") +
#theme_classic() +
theme(plot.margin = unit(c(0,0,0,0), "in")) +
coord_flip() +
geom_text(aes(label = Freq), vjust = 0.4, hjust = - 0.4, size …Run Code Online (Sandbox Code Playgroud) 经过一番搜索,我仍然不高兴!
是否有一种简单的方法可以制作一个y轴从原点开始并清晰显示所有数据的图形?
这是我的问题:
set.seed(123)
my.data<- data.frame(x.var = rnorm(100, 50),
y.var = rnorm(100, 50,10))
## Annoying because it doesn't start at origin
ggplot(my.data, aes(x.var, y.var))+
geom_point()
## Annoying because origin is not at bottom
ggplot(my.data, aes(x.var, y.var))+
geom_point()+
expand_limits(y = 0)
## Annoying because point is cut off
ggplot(my.data, aes(x.var, y.var))+
geom_point()+
scale_y_continuous(expand = c(0,0))+
expand_limits(y = 0)
Run Code Online (Sandbox Code Playgroud)
问题"强制原点从ggplot2(R)中的0开始"的最佳答案以
"你可能需要稍微调整一下以确保点不会被切断"
为什么会这样?我可以手动调整轴,但我不想每次都这样做!
互联网上的一些家伙有一个涉及的解决方案
#Find the current ymax value for upper bound
#(via http://stackoverflow.com/questions/7705345/how-can-i-extract-plot-axes-ranges-for-a-ggplot2-object#comment24184444_8167461 )
gy=ggplot_build(g)$panel$ranges[[1]]$y.range[2]
g=g+ylim(0,gy)
#Handle the overflow by expanding the …Run Code Online (Sandbox Code Playgroud) 我试图用stat_ecdf()累积成功作为预测模型创建的排名得分的函数.
#libraries
require(ggplot2)
require(scales)
# fake data for reproducibility
set.seed(123)
n <- 200
df <- data.frame(model_score= rexp(n=n,rate=1:n),
obs_set= sample(c("training","validation"),n,replace=TRUE))
df$model_rank <- rank(df$model_score)/n
df$target_outcome <- rbinom(n,1,1-df$model_rank)
# Plot Gain Chart using stat_ecdf()
ggplot(subset(df,target_outcome==1),aes(x = model_rank)) +
stat_ecdf(aes(colour = obs_set), size=1) +
scale_x_continuous(limits=c(0,1), labels=percent,breaks=seq(0,1,.1)) +
xlab("Model Percentile") + ylab("Percent of Target Outcome") +
scale_y_continuous(limits=c(0,1), labels=percent) +
geom_segment(aes(x=0,y=0,xend=1,yend=1),
colour = "gray", linetype="longdash", size=1) +
ggtitle("Gain Chart")
Run Code Online (Sandbox Code Playgroud)

我想做的就是强制ECDF从(0,0)开始,到(1,1)结束,这样曲线的开头或结尾就没有间隙了.如果可能的话,我想在语法中做到这一点ggplot2,但我会满足于一个聪明的解决方法.
@Henrik这不是这个问题的重复,因为我已经用scale_x_和定义了我的限制_y_continuous(),并且添加expand_limits()没有做任何事情.它不是PLOT的起源,而是需要修复的stat_ecdf()的端点.
我正在使用以下代码:
x_breaks <- seq(as.Date("2010/1/1"), as.Date("2015/4/1"), "months")
x_labels <- as.character(x_breaks, format="%b%y")
thousand_formatter<-function(x){
return(as.integer(x))
}
vLines <- data.frame('Date'=as.Date('2014/1/1'))
vLines <- rbind(vLines,vLines)
vLines$Date[1] <- as.Date('2013/3/4')
vLines$Date[2] <- as.Date('2014/6/2')
vLines$grp <- c('Complex Cases (except CD cases)','CD cases')
p <- ggplot(toPlot[1:261,], aes( Date, value)) + theme_bw() +ylab('Transactions') + xlab('') +
scale_x_date(breaks=x_breaks, labels=x_labels)
p <- p + geom_line(aes(colour = variable, fill= variable),size=1.5) +
theme(axis.text.y=element_text(hjust=0, angle=0),
axis.text.x = element_text(hjust=1, angle=45),
panel.grid.minor.x = element_blank(),
panel.grid.minor.y = element_blank(),
panel.grid.major.x=element_line(color='grey90',linetype='dashed'),
panel.grid.major.y=element_line(color='grey90',linetype='dashed'),
plot.title=element_text(size=20),
axis.text=element_text(size=10),
legend.key=element_blank(),
legend.title=element_blank()) +
scale_y_continuous(label=thousand_formatter) +
ggtitle('Some Title')+ …Run Code Online (Sandbox Code Playgroud) 我有一个正x和y值的数据框,我想在其中显示为散点图ggplot2.这些值远离点(0,0)聚集,但我想在图中包含x = 0和y = 0线以显示总体幅度.我怎样才能做到这一点?
set.seed(349)
d <- data.frame(x = runif(10, 1, 2), y = runif(10, 1, 2))
ggplot(d, aes(x,y)) + geom_point()
Run Code Online (Sandbox Code Playgroud)

但我想要的是大致相当于此的东西,而不必指定限制的两端:
ggplot(d, aes(x=x, y=y)) + geom_point() +
scale_x_continuous(limits = c(0,2)) + scale_y_continuous(limits = c(0,2))
Run Code Online (Sandbox Code Playgroud)

我仍在努力最终确定一个可复制的数字以供出版。审阅者希望看到下图的 y 轴从 0 开始并包含换行符“//”。y 轴不仅需要非常大(例如 1500 个单位),而且还需要非常紧密地放大(例如 300 个单位)。这使得审阅者希望我们添加一个换行符来表示我们的轴从 0 开始,但继续。
我想要的示例(注意 y 轴;这是在类似图中的 powerpoint 中手动完成的):

我的代码:
ggplot(data = quad2,
aes(x, predicted, group = group)) +
geom_point(aes(shape = group), size = 6) +
scale_shape_manual(values=c(19, 1)) +
geom_line(size = 2,
aes(linetype = group),
color = "black") +
scale_linetype_manual(values = c("solid", "dashed")) +
geom_linerange(size = 1,
aes(ymin = predicted - conf.low,
ymax = predicted + conf.high),
color = "black",
alpha = .8) +
geom_segment(aes(xend = x,
yend = …Run Code Online (Sandbox Code Playgroud) 在ggplot2中,我想让bar_plot与x轴对齐(删除附图所示的空白区域)。使用时expand_limits(y=0),似乎无法工作。有人可以帮忙吗?谢谢!
library(tidyverse)
library(RColorBrewer)
data <- data.frame(category=c("a","b","c","d"),value=4:1)
data %>% ggplot(aes(category,value,fill=category))+
geom_bar(stat='identity')+scale_fill_brewer(palette='Greens',direction=-1)+
expand_limits(y=0)
Run Code Online (Sandbox Code Playgroud)