我正在玩的数据来自下面列出的互联网资源
nba <- read.csv("http://datasets.flowingdata.com/ppg2008.csv", sep=",")
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个2D点图,比较该表中的两个指标,每个玩家在图上表示一个点.我有以下代码:
nbaplot <- ggplot(nba, aes(x= MIN, y= PTS, colour="green", label=Name)) +
geom_point()
Run Code Online (Sandbox Code Playgroud)
这给了我以下内容:
我想要的是一个玩家名字的标签就在点旁边.我认为ggplot美学中的标签功能会为我做这个,但事实并非如此.
我也尝试过text()
函数和textxy()
函数library(calibrate)
,它们似乎都不适用于ggplot.
如何为这些点添加名称标签?
我正在绘制一个分类数据集,并希望使用独特的颜色来表示不同的类别.给定一个数字n
,我怎样才能获得n
R中MOST独特颜色的数量?谢谢.
我需要制作一个空图.这是我能想到的最好的.
plot(0, xaxt = 'n', yaxt = 'n', bty = 'n', pch = '', ylab = '', xlab = '')
Run Code Online (Sandbox Code Playgroud)
更简单的解决方案?
PS:完全空,没有轴等.
曾几何时,我ggplot2
使用windowsFonts(Times=windowsFont("TT Times New Roman"))
改变它来改变我的字体.现在我无法理解这一点.
在尝试设置family=""
时ggplot2
theme()
我似乎无法生成字体更改,因为我使用不同的字体系列编译下面的MWE.
library(ggplot2)
library(extrafont)
loadfonts(device = "win")
a <- ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() +
ggtitle("Fuel Efficiency of 32 Cars") +
xlab("Weight (x1000 lb)") + ylab("Miles per Gallon") +
theme(text=element_text(size=16,
# family="Comic Sans MS"))
# family="CM Roman"))
# family="TT Times New Roman"))
# family="Sans"))
family="Serif"))
print(a)
print("Graph should have refreshed")
Run Code Online (Sandbox Code Playgroud)
R正在返回一个警告font family not found in Windows font database
,但有一个我正在关注的教程(如果我能再次找到它,我将在这里更新链接)说这是正常的而不是问题.此外,这在某种程度上起作用,因为我的图表曾经使用过一些arial或helvitica类型的字体.我认为即使在最初的迁移期间,这也始终是一个警告.
UPDATE
当我运行windowsFonts()
我的输出是
$ serif [1]"TT Times …
我想dplyr::group_by
在另一个函数中使用函数,但我不知道如何将参数传递给这个函数.
有人能提供一个有效的例子吗?
library(dplyr)
data(iris)
iris %.% group_by(Species) %.% summarise(n = n()) #
## Source: local data frame [3 x 2]
## Species n
## 1 virginica 50
## 2 versicolor 50
## 3 setosa 50
mytable0 <- function(x, ...) x %.% group_by(...) %.% summarise(n = n())
mytable0(iris, "Species") # OK
## Source: local data frame [3 x 2]
## Species n
## 1 virginica 50
## 2 versicolor 50
## 3 setosa 50
mytable1 <- function(x, key) x …
Run Code Online (Sandbox Code Playgroud) 我ggplot
用来绘制时间过程数据(随着时间的推移固定比例到屏幕上的不同对象)并想要使用功能区来显示SE,但是功能区本身在顶部和底部边缘都有线条,这使得读取图形a有点难.我无法弄清楚如何摆脱这些边缘线.这是我的情节代码:
ggplot(d, aes(Time, y, color = Object, fill = Object)) +
stat_summary(fun.y = "mean", geom = "line", size = 2) +
stat_summary(fun.data = "mean_se", geom = "ribbon", alpha = .3)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
这是一个最小的工作示例.我已将我的数据压缩为:
Time Object y lower upper
1 1000 C 0.12453389 0.04510504 0.2039627
2 1000 T 0.58826856 0.37615078 0.8003864
3 1000 U 0.09437160 0.03278069 0.1559625
4 1100 C 0.12140127 0.03943988 0.2033627
5 1100 T 0.64560823 0.44898727 0.8422292
6 1100 U 0.06725172 0.01584248 0.1186610
d <- structure(list(Time = c(1000L, …
Run Code Online (Sandbox Code Playgroud) 我想用ggplot创建一个分裂小提琴密度图,就像seaborn文档的这个页面上的第四个例子一样.
这是一些数据:
set.seed(20160229)
my_data = data.frame(
y=c(rnorm(1000), rnorm(1000, 0.5), rnorm(1000, 1), rnorm(1000, 1.5)),
x=c(rep('a', 2000), rep('b', 2000)),
m=c(rep('i', 1000), rep('j', 2000), rep('i', 1000))
)
Run Code Online (Sandbox Code Playgroud)
我可以像这样绘制躲闪的小提琴:
library('ggplot2')
ggplot(my_data, aes(x, y, fill=m)) +
geom_violin()
Run Code Online (Sandbox Code Playgroud)
但是在视觉上比较并排分布中不同点的宽度很难.我无法在ggplot中找到任何拆分小提琴的例子 - 这可能吗?
我找到了一个基本的R图形解决方案,但功能很长,我想突出显示分布模式,这些模式很容易在ggplot中作为附加层添加,但如果我需要弄清楚如何编辑该功能将更难.
如何在ggplot中不对称地调整限制的扩展?例如,
library(ggplot2)
ggplot(mtcars) +
geom_bar(aes(x = cyl), width = 1)
Run Code Online (Sandbox Code Playgroud)
我希望条形图的底部与面板背景的底部齐平,但仍然需要顶部的空间.我可以使用空白注释来实现此目的:
ggplot(mtcars) +
geom_bar(aes(x = cyl), width = 1) +
annotate("blank", x = 4, y = 16) +
scale_y_continuous(expand = c(0.0,0))
Run Code Online (Sandbox Code Playgroud)
ggplot
但是,在以前的版本中,我可以使用Rosen Matev提供的解决方案:
library("scales")
scale_dimension.custom_expand <- function(scale, expand = ggplot2:::scale_expand(scale)) {
expand_range(ggplot2:::scale_limits(scale), expand[[1]], expand[[2]])
}
scale_y_continuous <- function(...) {
s <- ggplot2::scale_y_continuous(...)
class(s) <- c('custom_expand', class(s))
s
}
Run Code Online (Sandbox Code Playgroud)
然后使用scale_y_continuous(expand = list(c(0,0.1), c(0,0)))
会在图表顶部添加一致的附加内容.但是,在当前版本中,我收到错误
ggplot(mtcars) +
geom_bar(aes(x = cyl), width = 1) +
scale_y_continuous(expand = list(c(0,0.1), c(0,0))) …
Run Code Online (Sandbox Code Playgroud) 在下面的例子中,我们为什么要赞成使用f1
过f2
?从某种意义上说它更有效吗?对于习惯使用R的人来说,使用"substitute + eval"选项似乎更自然.
library(dplyr)
d = data.frame(x = 1:5,
y = rnorm(5))
# using enquo + !!
f1 = function(mydata, myvar) {
m = enquo(myvar)
mydata %>%
mutate(two_y = 2 * !!m)
}
# using substitute + eval
f2 = function(mydata, myvar) {
m = substitute(myvar)
mydata %>%
mutate(two_y = 2 * eval(m))
}
all.equal(d %>% f1(y), d %>% f2(y)) # TRUE
Run Code Online (Sandbox Code Playgroud)
换句话说,除了这个特殊的例子之外,我的问题是:我可以使用dplyr
具有良好的基础R的替代+ eval的NSE函数编程,或者我真的需要学会喜欢所有这些rlang
函数,因为有它的好处(速度,清晰度,组合性......)?
我正在使用R来显示一些所有数据都是.txt格式的数据.目录中有几百个文件,我想一次性将它们全部加载到一个表中.
有帮助吗?
编辑:
列出文件不是问题.但是我无法从列表转到内容.我从这里尝试了一些代码,但是我得到了这个部分的错误:
all.the.data <- lapply( all.the.files, txt , header=TRUE)
Run Code Online (Sandbox Code Playgroud)
话
Error in match.fun(FUN) : object 'txt' not found
Run Code Online (Sandbox Code Playgroud)
任何能够澄清这个问题的代码片段都将不胜感激.