我想用ggplot绘制数值向量的值的频率.随着plot()
是相当简单,但我不能得到同样的结果ggplot.
library(ggplot2)
dice_results <- c(1,3,2,4,5,6,5,3,2,1,6,2,6,5,6,4)
hist(dice_results)
Run Code Online (Sandbox Code Playgroud)
ggplot(dice_results) + geom_bar()
# Error: ggplot2 doesn't know how to deal with data of class numeric
Run Code Online (Sandbox Code Playgroud)
我应该创建一个数据框ggplot()
来绘制我的矢量吗?
我正在努力提高离散值直方图的清晰度和方面,我需要用对数标度来表示.
请考虑以下MWE
set.seed(99)
data <- data.frame(dist = as.integer(rlnorm(1000, sdlog = 2)))
class(data$dist)
ggplot(data, aes(x=dist)) + geom_histogram()
Run Code Online (Sandbox Code Playgroud)
哪个产生
然后
ggplot(data, aes(x=dist)) + geom_line() + scale_x_log10(breaks=c(1,2,3,4,5,10,100))
Run Code Online (Sandbox Code Playgroud)
这可能更糟糕
从现在开始,它给人的印象是"1"和"2"之间缺少某些东西,而且还不完全清楚哪个条的值为"1"(条形图位于刻度线的右侧),哪个条形图的值为"2" "(栏位于刻度线的左侧).
据我所知,技术上ggplot为对数刻度提供了"正确"的视觉答案.然而作为观察者,我在理解它时遇到了一些问题.
有可能改善一些东西吗?
编辑:
当我将Jaap解决方案应用于我的真实数据时会发生这种情况
x = 0和x = 1之间以及x = 1和x = 2之间的下降来自何处?我的值是离散的,但那么为什么绘图也映射x = 1.5和x = 2.5?
我对有的名字感到有点困惑unlist()
.请考虑以下MWE
vector1 <- c(1,2,3,4,5,6,7,8,9,10)
names(vector1) <- c(1,2,2,3,4,4,5,6,6,6)
names(vector1)
# [1] "1" "2" "2" "3" "4" "4" "5" "6" "6" "6"
list1 <- split(vector1,names(vector1))
names(list1)
# [1] "1" "2" "3" "4" "5" "6"
Run Code Online (Sandbox Code Playgroud)
但是之后
names(unlist(list1))
# [1] "1.1" "2.2" "2.2" "3.3" "4.4" "4.4" "5.5" "6.6" "6.6" "6.6"
Run Code Online (Sandbox Code Playgroud)
根据文件 unlist()
默认情况下,unlist尝试保留x中存在的命名信息.
所以我无法理解这种特殊的行为.
我的问题是由创建的名称unlist()
无法与原始名称匹配vector1
.
我是运行 R 3.1 的 Ubuntu 12.04.4 机器的用户(无管理员权限)。
我发现我无法启动 R,因为Fatal error: cannot create 'R_TempDir
. 问题非常简单(并且已经在此处记录):没有足够的磁盘空间来初始化 R 临时目录。的确:
df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10320184 10284088 0 100% /
Run Code Online (Sandbox Code Playgroud)
但是后来我在不同的分区 ( /dev/vdb
)上有足够的空间。我怎么能告诉 R 在不同的位置创建一个临时文件夹?
由于我无法启动 R,我尝试在我的 .Rprofile
.First <- function(){
## other stuff
tempdir("path/to/plenty/of/space/tmp")
## other stuff
}
Run Code Online (Sandbox Code Playgroud)
然而它不起作用。
Error in tempdir("path/to/plenty/of/space/tmp") :
unused argument ("path/to/plenty/of/space/tmp")
Calls: .First -> tempdir
Execution halted
Run Code Online (Sandbox Code Playgroud)
编辑:问题已经在这里回答。创建一个.Rprofile
并添加这一行TMP = '<your-desired-tempdir>'
我有一个简单的8乘8矩阵
M <- matrix(rnorm(64), nrow=8, ncol=8)
Run Code Online (Sandbox Code Playgroud)
我该怎样转换它来绘制它library(corrplot)
?没有转换,错误是:
corrplot.mixed(M)
Run Code Online (Sandbox Code Playgroud)
corrplot中的错误(corr,type ="upper",method = upper,diag = TRUE,tl.pos = tl.pos,:矩阵不在[-1,1]中!我猜这会假设矩阵应该是[-1,1]?
我有这个数字:
require(corrplot)
par(oma=c(0,0,2,0), mfrow = c(1, 3))
for (country in c("Italy","Germany","Afghanistan")) {
corrplot.mixed(cor(data.frame(v1=rnorm(40),
v2=rnorm(40),
v3=rnorm(40),
v4=rnorm(40),
v5=rnorm(40),
v6=rnorm(40),
v7=rnorm(40),
v8=rnorm(40)), use="pairwise.complete.obs"),
main=country)
}
par(mfrow = c(1, 1))
Run Code Online (Sandbox Code Playgroud)
产生的标题减半:
按照这个答案我设置oma=c(0,0,2,0)
但它不会影响结果.我不确定应修改哪个边距.我看着?par
并修改了"oma","omd","omi","mai","mar"而没有结果.
让我定义一个数据框,其中一列id
由整数向量组成
df <- data.frame(id = c(1,2,2,3,3))
Run Code Online (Sandbox Code Playgroud)
和一列objects
,而不是字符向量列表。让我们使用以下函数创建列
randomObjects <- function(argument) {
numberObjects <- sample(c(1,2,3,4), 1)
vector <- character()
for (i in 1:numberObjects) {
vector <- c(vector, sample(c("apple","pear","banana"), 1))
}
return(vector)
}
Run Code Online (Sandbox Code Playgroud)
然后用 lapply
set.seed(28100)
df$objects <- lapply(df$id, randomObjects)
Run Code Online (Sandbox Code Playgroud)
结果数据框是
df
# id objects
# 1 1 apple, apple
# 2 2 apple, banana, pear
# 3 2 banana
# 4 3 banana, pear, banana
# 5 3 pear, pear, apple, pear
Run Code Online (Sandbox Code Playgroud)
现在我想id
用这样的数据框计算每个对象对应的对象数量
summary <- …
Run Code Online (Sandbox Code Playgroud) 我想在RSelenium
和页面中找到PDF文件的所有链接Xpath
.
请考虑
require(RSelenium)
RSelenium::checkForServer()
RSelenium::startServer()
remDr <- remoteDriver()
remDr$open()
remDr$navigate("https://cran.r-project.org/manuals.html")
Run Code Online (Sandbox Code Playgroud)
在页面中有多个指向PDF文件的链接,例如
<a href="doc/manuals/r-release/R-intro.pdf">PDF</a>
Run Code Online (Sandbox Code Playgroud)
但我第一次尝试
remDr$findElement(using = "xpath", "//a[contains(@href,'.pdf')/@href")
Run Code Online (Sandbox Code Playgroud)
产生以下错误
Error: Summary: InvalidSelector
Detail: Argument was an invalid selector (e.g. XPath/CSS).
class: org.openqa.selenium.InvalidSelectorException
Run Code Online (Sandbox Code Playgroud)
我的语法错了吗?
请考虑以下事项
set.seed(28100)
random_data <- data.frame(x=rnorm(100),
y=rnorm(100),
colour=sample(c("a","b","c"), 100, replace=TRUE),
class=sample(c("alpha","beta"), 100, replace=TRUE))
require(ggplot2)
ggplot() +
geom_smooth(data=random_data, aes(x=x, y=y, colour=colour, linetype=class), se=FALSE)
Run Code Online (Sandbox Code Playgroud)
返回
图例中线条的颜色具有class
误导性,因为蓝色 - - 的默认颜色geom_smooth
- 也用于映射属性c
.
如何设置geom_smooth
中性色的默认颜色 - 比方说 - 灰色?
如果查询返回的Wikidata资源没有以我过滤的语言提供的可用标签,则获得一个空单元格。
SELECT *
WHERE
{
?country wdt:P31 wd:Q6256.
?country rdfs:label ?country_name
FILTER(LANG(?country_name) = 'jbo').
}
Run Code Online (Sandbox Code Playgroud)
如果第一种语言失败,如何请求以任何一种可用语言返回标签?