我最近从版本0.8.9升级到ggplot2 0.9.0,现在我得到的是我的情节图例只显示了图中使用的因子级别(它省略了未使用的因素).在它包含图例中的所有因子水平之前.我正在运行Windows 7和R 2.15.0(今天之前的2.14.2).
还有其他人发现这个吗?有没有办法让我可以在我的情节图例中显示未使用的因子水平?
library(ggplot2)
df <- data.frame(fruit = rep(c("apple", "orange"), times=11),
year = 1990:2011,
qty = rnorm(22, 100, 20))
# This plot only gives "apple" in the legend now.
# Before, I used to get both "apple" and "orange".
qplot(year, qty, data = subset(df, fruit=="apple"), colour = fruit)
Run Code Online (Sandbox Code Playgroud)
qplot()曾经在传奇中给我"苹果"和"橙色"(尽管只有"苹果"的分数).现在我只在传说中得到"苹果".
这个原因出现了 - 我正在制作许多数据集的子集,我希望这些图例标准化(通常我会欣赏未使用的级别被自动删除而不必输入droplevels(),但这是一个我希望那些未使用的水平).如果这只是我的电脑本地问题,请道歉.
我想做这个问题的反面,并且与这个问题相反,尽管这是关于传说,而不是情节本身.
其他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 .
我想将特定项目作为条形图中的空条添加到 x 轴
例如:
# load packages
library(reshape2)
library(tidyverse)
library(scales)
#get data
data(tips, package = "reshape2")
tips
# make plot
myplot <- ggplot(tips, aes(day, group = sex)) +
geom_bar(aes(y = ..prop.., fill = factor(..x..)), stat="count") +
scale_y_continuous(labels=scales::percent) +
ylab("relative frequencies") +
facet_grid(~sex)
myplot
Run Code Online (Sandbox Code Playgroud)
现在我想添加缺少的工作日,作为空条:
missing_days <-c("Tue","Wed")
Run Code Online (Sandbox Code Playgroud)
如果可能,我想保留tips( 以便我仍然可以在aes命令中使用其他变量的“整洁”长数据格式。将“空”项添加到长数据格式的技巧是什么?
有几个问题询问如何更改 ggplot x 轴刻度,但我遇到了麻烦,可能是因为我用来绘图的其他美学。我想将 x 轴刻度从 7 扩展到 25。
我正在使用以下向量:
var <- c(2,2,1,0,1,1,1,1,1,3,2,3,3,5,1,4,4,0,3,4,1,0,3,3,0,0,
1,3,2,6,2,2,2,1,0,2,3,2,0,0,0,0,3,2,2,4,3,2,2,0,4,1,0,1,3,1,4,3,1,2,
6,7,6,1,2,2,4,5,3,0,6,5,2,0,7,1,7,3,1,4,1,1,2,1,1,2,1,1,4,2,0,3,3,2,2,2,5,3,2,5,2,5)
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码制作一个直方图,其中 x 轴刻度位于条形下方
df <- data.table(x = var)
df <- df[, .N, by=x]
p <- ggplot(df, aes(x=factor(x), y=N)) +
geom_bar(stat="identity", width=1.0,
colour = "darkgreen",
fill = 'lightslateblue')
p <- p + labs(title = "hello world", x = "x tick", y = "ytick")
print(p)
Run Code Online (Sandbox Code Playgroud)
当我打印直方图时,我希望 x 轴刻度达到 25

我尝试使用coord_cartesian(xlim = c(-0, 25))但它没有正确绘制,因为我希望沿着 x 轴标记刻度。
