我正在处理相当大的 Pandas DataFrame - 我的数据集类似于以下df设置:
import pandas as pd
import numpy as np
#--------------------------------------------- SIZING PARAMETERS :
R1 = 20 # .repeat( repeats = R1 )
R2 = 10 # .repeat( repeats = R2 )
R3 = 541680 # .repeat( repeats = [ R3, R4 ] )
R4 = 576720 # .repeat( repeats = [ R3, R4 ] )
T = 55920 # .tile( , T)
A1 = np.arange( 0, 2708400, 100 ) # ~ 20x re-used
A2 …Run Code Online (Sandbox Code Playgroud) 我有一个非常大5e5的(x, y)坐标数据集(大约行)和附加功能z.它是这样的:
x <- rnorm(1e6, 0, 5)
y <- rnorm(1e6, 0, 10)
dist <- sqrt(x^2 + y^2)
z <- exp(-(dist / 8)^2)
Run Code Online (Sandbox Code Playgroud)
我想用一个z用作颜色美学的特征来绘制它们.但是geom_point这么简单的数据集需要一段时间:
data.frame(x, y, z) %>%
ggplot() + geom_point(aes(x, y, color = z))
Run Code Online (Sandbox Code Playgroud)
所以我认为我需要一种以某种方式聚合积分的方法.一种方法是将平面划分为一些小方块,并平均z位于正方形中的点的所有值.但从长远来看,它可能有点麻烦,使用一些已有的工具可能会更好.所以我认为geom_hex在我的情况下看起来很好的geom.但fill审美是count默认设置.所以我的问题是:
fill值geom_hex轻松更改为z功能的平均值吗?z可以在六边形内平均值然后绘制?建议解决方案的比较:
library(microbenchmark)
microbenchmark(
'stat_summary_hex' = {data.frame(x, y, z) %>%
ggplot( aes(x, y, z=z )) + …Run Code Online (Sandbox Code Playgroud) tibble作为列名,我得到了几个因素的相互作用(参见下面两个因素的例子).
ex <- structure(list(`Monday*FALSE` = 42.74, `Monday*TRUE` = 70.68,
`Tuesday*TRUE` = 44.05, `Tuesday*FALSE` = 51.25, `Wednesday*TRUE` = 35.57,
`Wednesday*FALSE` = 59.24, `Thursday*TRUE` = 85.3, `Thursday*FALSE` = 59.91,
`Friday*TRUE` = 47.27, `Friday*FALSE` = 47.44, `Saturday*TRUE` = 62.28,
`Saturday*FALSE` = 98.8, `Sunday*TRUE` = 57.11, `Sunday*FALSE` = 65.99), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -1L))
Run Code Online (Sandbox Code Playgroud)
我想写一个允许gather这个的函数tibble,但另外key根据因子的输入名称创建一个名称.但是,以下内容无法正常工作,因为paste0返回一个字符串.
my_gather <- function(data, ...){
vars <- enquos(...)
data %>%
gather(key = paste0(!!!vars, sep = '*'), value …Run Code Online (Sandbox Code Playgroud) 我有一个与此类似的数据集:
x <- 100 - abs(rnorm(1e6, 0, 5))
y <- 50 + rnorm(1e6, 0, 3)
dist <- sqrt((x - 100)^2 + (y - 50)^2)
z <- exp(-(dist / 8)^2)
Run Code Online (Sandbox Code Playgroud)
可以看作如下:
data.frame(x, y, z) %>%
ggplot() + geom_point(aes(x, y, color = z))
Run Code Online (Sandbox Code Playgroud)
我想做的是一个堆叠的半圆图,后续图层的平均值为z.我认为它可以与组合来实现geom_col和coord_polar(),虽然我可以得到最远
data.frame(x, y, z, dist) %>%
mutate(dist_fct = cut(dist, seq(0, max(dist), by = 5))) %>%
ggplot() + geom_bar(aes(x = 1, y = 1, fill = dist_fct), stat = 'identity', position = 'fill') +
coord_polar()
Run Code Online (Sandbox Code Playgroud)
这显然远远超出预期(图层应该是相同的大小,图应该被剪裁在右半边). …
我写了以下函数来制作一个定制的堆积图:
stacked_plot <- function(data, what, by = NULL, date_col = date, date_unit = NULL, type = 'area'){
by <- enquo(by)
what <- ensym(what)
date_col <- ensym(date_col)
date_unit <- enquo(date_unit)
if (!rlang::as_string(date_col) %in% names(data)){
return(cat('Nie odnaleziono kolumny "', as_string(date_col), '".', sep = ''))
}
if (!rlang::quo_is_null(date_unit)){
data <- data %>%
mutate(!!date_col := floor_date(!!date_col, unit = !!date_unit, week_start = 1))
}
if (!rlang::quo_is_null(by)) {
data <- data %>%
filter(!is.na(!!by)) %>%
group_by(!!date_col, !!by) %>%
summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
ungroup() %>% …Run Code Online (Sandbox Code Playgroud) 我有包含矢量坐标及其特征的数据 - success_rate以及prop:
ex_data <- structure(list(group = c("group A", "group A", "group A", "group A",
"group A", "group A", "group C", "group C", "group C", "group C",
"group C", "group W", "group W", "group W", "group W", "group W"
), category = c(5, 4, 3, 2, 1, 6, 5, 1, 2, 3, 4, 1, 4, 5, 2,
3), success_rate = c(0.816037735849057, 0.938775510204082, 0.653061224489796,
0.985915492957746, 0.934306569343066, 1, 0.979166666666667, 0.887323943661972,
0.319587628865979, 0.721590909090909, 0.941176470588235, 0.689320388349515,
0.338028169014085, 0.396551724137931, 0.7375, 0.763948497854077
), …Run Code Online (Sandbox Code Playgroud) 免责声明:我搜索过SO,发现类似的问题(例如:URL),主要建议注意名称的大小写差异,但他们没有解决我的问题。
不久前,我创建了一个 GitHub 页面,写了我的第一篇文章,并在其中包含了一些图像。推荐的包含图像的方式是相对链接,例如:
<img src="./images/equation-1.gif" style="display: block; margin: auto;" />
Run Code Online (Sandbox Code Playgroud)
但是,这种方式图像仅显示在 GitHub 存储库内,而不显示在 GitHub 页面上。因此,我将它们替换为 GitHub 存储库中图像所引用的直接链接,如下所示:
<img src="https://github.com/KubaMichalczyk/kubamichalczyk.github.io/raw/master/_posts/images/equation-1.gif" style="display: block; margin: auto;" />
Run Code Online (Sandbox Code Playgroud)
它奏效了。然而,这只是乍一看,几天后所有链接都崩溃了。从那时起,这些图像大部分时间都会显示,但有时链接会损坏。不幸的是,我不知道为什么会这样,我想一劳永逸地修复它。因此,我的问题是在 GitHub 页面上包含图像的正确方法是什么?为什么相对链接实际上不起作用?存储库是私有还是公共有关系吗?
我有一个stacked_plot()使用整洁评估来制作堆叠图的函数。我想将它包含在我的包中,并从该包中调用另一个函数来调用它。这是最小的例子:
stacked_plot <- function(data, what, by = NULL, date_col = date){
by <- rlang::enquo(by)
what <- rlang::ensym(what)
date_col <- rlang::ensym(date_col)
data <- data %>%
dplyr::group_by(!!date_col, !!by) %>%
dplyr::summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
dplyr::ungroup() %>%
tidyr::complete(!!date_col, !!by, fill = rlang::list2(!!what := 0))
p <- data %>%
ggplot2::ggplot(ggplot2::aes(!!date_col, !!what, fill = !!by)) +
ggplot2::geom_area(position = 'stack')
print(p)
}
#' @importFrom rlang .data
call_plot <- function() {
to_plot <- data.frame(date = rep(seq(lubridate::ymd('2020-01-01'),
lubridate::ymd('2020-03-30'),
by = '1 day'), each = …Run Code Online (Sandbox Code Playgroud) 我需要编写一个dplyr函数来创建自定义面积图。所以这是我的尝试。
area_plot <- function(data, what, by){
by <- ensym(by)
what <- ensym(what)
data %>%
filter(!is.na(!!by)) %>%
group_by(date, !!by) %>%
summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
complete(date, !!by, fill = rlang::list2(!!what := 0)) %>%
ggplot(aes(date, !!what, fill = !!by)) +
geom_area(position = 'stack') +
scale_x_date(breaks = '1 month', date_labels = '%Y-%m', expand = c(.01, .01)) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 90, vjust = .4)) +
labs(fill = '')
}
Run Code Online (Sandbox Code Playgroud)
但是我一直想知道是否有任何默认值的by参数将输出geom_area所有组的图。我知道我可以if用来定义ggplot2首先使用的数据,然后在函数中执行以下操作: …