Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何将ggplot stat_sum映射到尺寸美学?_R_Plot_Ggplot2 - Fatal编程技术网

R 如何将ggplot stat_sum映射到尺寸美学?

R 如何将ggplot stat_sum映射到尺寸美学?,r,plot,ggplot2,R,Plot,Ggplot2,据我所知,ggplot的stat方法获取值数组并计算新值,这些值可以通过某种美学来显示。我希望这些点的大小与每组中一个数值变量的总和成比例(唯一的x,y组合)。我感到惊讶的是,每当一组中有多个值时,就会绘制多个点,而不是一个点表示所有值的总和。下面是一个简单的工作示例: ex_data <- data.frame( a = sort(rep(letters[1:4], 5)), b = rep(letters[6:7], 10), c = rnorm(20, 100

据我所知,ggplot的stat方法获取值数组并计算新值,这些值可以通过某种美学来显示。我希望这些点的大小与每组中一个数值变量的总和成比例(唯一的
x,y
组合)。我感到惊讶的是,每当一组中有多个值时,就会绘制多个点,而不是一个点表示所有值的总和。下面是一个简单的工作示例:

ex_data <- data.frame(
    a = sort(rep(letters[1:4], 5)),
    b = rep(letters[6:7], 10),
    c = rnorm(20, 1000, 500),
    d = rep(c('h', 'h', 'i', 'i'), 5)
)

p <- ggplot(ex_data,
    aes(x = b, y = a, size = log10(c), color = d, shape = d)) +
    geom_point(stat = 'sum', alpha = 0.33) +
    scale_radius(guide = guide_legend(title = 'c (log)')) +
    scale_color_manual(values = c('cyan', 'magenta'),
                    guide = guide_legend(title = 'd'),
                    labels = c('h', 'i')) +
    scale_shape_manual(values = c(15, 18), guide = FALSE) +
    theme_bw()

print(p)

ex_data我认为您需要以某种方式重塑数据。下面是我的示例(带有
data.table
dplyr

ex_数据_2%
[,列表(c=总和(c),
d=哪个.max(表(d)),by=列表(a,b)]%>%
[,d:=c('c','d')[d]]

p看起来
stat='sum'
只能与
y
美学一起工作,因此我们需要在转到
ggplot
之前聚合数据并应用统计数据。下面是一个使用
dplyr
的工作示例。(注意:堆栈溢出审阅者不允许我编辑MAK77的回复并接受它,这是我编写新答案的唯一原因。)

require(dplyr)
需要(ggplot2)
ex_数据%
突变(csum=sum(c))%>%
总结所有(第一)

p如果在坐标上映射两种颜色,怎么可能有一个点?那一点应该是什么颜色?什么形状?我指的是每种颜色一个点,而不是同一位置相同颜色的两个点一般来说,我发现
stat\u summary
对于
y
上的简单摘要功能非常有用。听起来您希望将数据集汇总为每个
a
/
b
/
d
组合的单个值
c
。在ggplot之外,使用汇总数据集创建所需的绘图可能是最简单的方法。没错,但为什么会有这种限制,为什么只有
y
美学?为什么没有错误或警告信息,只是默默地不做它的工作?另外,
geom_count
正确使用计数统计信息,如果能够使用任何其他统计信息,那就太好了。
sort.list中的错误(y):“x”必须是“sort.list”的原子,您在列表中调用过“sort”吗?
谢谢您的回答!我运行代码,这会在每个点上降低一级
d
,所以我有青色或洋红色(我猜是因为
哪个最大(表(d))
。另一件事是,这样
统计就没有意义了,足以将
大小
传递给主要美学,所以ggplot的这种便利性无法被利用。
ex_data_2 <- data.table(ex_data) %>%
    .[, list(c = sum(c), 
             d = which.max(table(d))), by = list(a, b)] %>%
    .[, d := c('c', 'd')[d]]
p <- ggplot(ex_data_2,
            aes(x = b, y = a, size = log(c), color = d, shape = d)) +
    geom_point(stat = 'sum', alpha = 0.33) +
    scale_radius(guide = guide_legend(title = 'c (log)')) +
    scale_color_manual(values = c('cyan', 'magenta'),
                       guide = guide_legend(title = 'd'),
                       labels = c('h', 'i')) +
    scale_shape_manual(values = c(15, 18), guide = FALSE) + 
    theme_bw()
p
require(dplyr)
require(ggplot2)

ex_data <- data.frame(
    a = sort(rep(letters[1:4], 5)),
    b = rep(letters[6:7], 10),
    c = rnorm(20, 1000, 500),
    d = rep(c('h', 'h', 'i', 'i'), 5)
)

ex_data_2 <- ex_data %>%
        group_by(a, b, d) %>%
        mutate(csum = sum(c)) %>%
        summarise_all(first)

p <- ggplot(ex_data_2,
            aes(x = b, y = a, size = log(csum), color = d, shape = d)) +
    geom_point(alpha = 0.33) +
    scale_radius(guide = guide_legend(title = 'c (log)')) +
    scale_color_manual(values = c('cyan', 'magenta'),
                    guide = guide_legend(title = 'd'),
                    labels = c('h', 'i')) +
    scale_shape_manual(values = c(15, 18), guide = FALSE) + 
    theme_bw()
p