Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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 如何使用两个类对ggplot2直方图进行分级,每个类具有独立的级别?_R_Ggplot2_Histogram - Fatal编程技术网

R 如何使用两个类对ggplot2直方图进行分级,每个类具有独立的级别?

R 如何使用两个类对ggplot2直方图进行分级,每个类具有独立的级别?,r,ggplot2,histogram,R,Ggplot2,Histogram,假设我有以下数据: xy <- data.frame(cbind(c(1,2,3,4,5,2,3,4),c(rep('A',5),rep('B',3)))) 我得到这个图形: 但我想看到水平线独立调平,即红色条调平至0.2,蓝色条调平至0.333。我怎样才能做到呢 此外,如何设置y轴以百分比而不是小数显示数字 非常感谢。这似乎可以完成任务。它使用..密度。。而不是..count..,这是一种计算a/B factor列中的级别数的非常丑陋的方法,然后使用scales包在y轴上获取标签 g

假设我有以下数据:

xy <- data.frame(cbind(c(1,2,3,4,5,2,3,4),c(rep('A',5),rep('B',3))))
我得到这个图形:

但我想看到水平线独立调平,即红色条调平至0.2,蓝色条调平至0.333。我怎样才能做到呢

此外,如何设置y轴以百分比而不是小数显示数字


非常感谢。

这似乎可以完成任务。它使用..密度。。而不是..count..,这是一种计算a/B factor列中的级别数的非常丑陋的方法,然后使用scales包在y轴上获取标签

ggplot(xy, aes(x = x, fill = y)) +
  geom_histogram(aes(y=..density../sum(..density..)*length(unique(xy$y)), group = y), position = "dodge") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))

这似乎很管用。它使用..密度。。而不是..count..,这是一种计算a/B factor列中的级别数的非常丑陋的方法,然后使用scales包在y轴上获取标签

ggplot(xy, aes(x = x, fill = y)) +
  geom_histogram(aes(y=..density../sum(..density..)*length(unique(xy$y)), group = y), position = "dodge") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))

或者,要计算
ggplot
中的所有内容,您可以先计算相对频率,然后使用此值与
geom\u col
进行绘图
preserve=“single”
保持条的宽度相等:

library(ggplot2)
library(dpylr)

xy <- data.frame(x = c(1,2,3,4,5,2,3,4),
                 y = c(rep('A',5),rep('B',3)))

xy <- xy %>% 
  group_by(y, x) %>% 
  summarise(rel_freq = n()) %>% 
  mutate(rel_freq = rel_freq / n())

ggplot(xy, aes(x = x, y = rel_freq, fill = y)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))
库(ggplot2)
图书馆(dpylr)
xy%
总结(rel_freq=n())%>%
变异(rel_freq=rel_freq/n())
ggplot(xy,aes(x=x,y=rel_freq,fill=y))+
几何坐标(位置=位置2(保留=“单个”))+
比例连续(标签=比例::百分比格式(精度=1))

或者,要计算
ggplot
中的所有内容,您可以先计算相对频率,然后使用此值与
geom\u col
进行绘图
preserve=“single”
保持条的宽度相等:

library(ggplot2)
library(dpylr)

xy <- data.frame(x = c(1,2,3,4,5,2,3,4),
                 y = c(rep('A',5),rep('B',3)))

xy <- xy %>% 
  group_by(y, x) %>% 
  summarise(rel_freq = n()) %>% 
  mutate(rel_freq = rel_freq / n())

ggplot(xy, aes(x = x, y = rel_freq, fill = y)) +
  geom_col(position = position_dodge2(preserve = "single")) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1))
库(ggplot2)
图书馆(dpylr)
xy%
总结(rel_freq=n())%>%
变异(rel_freq=rel_freq/n())
ggplot(xy,aes(x=x,y=rel_freq,fill=y))+
几何坐标(位置=位置2(保留=“单个”))+
比例连续(标签=比例::百分比格式(精度=1))

您是否尝试了您的代码?什么都做不到你试试你的代码?这里什么都找不到谢谢你。它对示例代码有效,但对我的真实数据无效。我也做了一个小体验,做xy0谢谢。它对示例代码有效,但对我的真实数据无效。我也做了一个小的经验,做xy0工作!非常感谢你!工作!非常感谢你!