堆叠 geom_bar 而不聚合填充值会导致轴值不正确
stacked geom_bar without aggregating the fill values results in incorrect axis values
我正在尝试创建一个不对填充值求和的堆叠条形图。例如,假设我有一个随着温度 (y) 升高而改变颜色的解决方案。我想要一个条形图,显示颜色随温度升高沿 y 轴上升。我基本上成功地做到了这一点,但是 y 轴刻度不正确
示例数据:
x<- data.frame(color = c("red", "blue", "red", "orange"), temperature = c(1, 5, 10, 20), trial = c(1, 1, 1, 1))
x
color temperature trial
1 red 1 1
2 blue 5 1
3 red 10 1
4 orange 20 1
注意只有一次试炼,所以只有一次试炼才会有一根吧。另请注意,当温度达到 5 时,颜色从红色变为蓝色,然后当温度达到 10 时,颜色从蓝色变为红色。我希望条形图沿 y 轴以类似的方式改变颜色。当我绘制它时,y 轴刻度线是错误的:
[![#Convert to factors for plotting
x$temperature<- as.factor(x$temperature)
x$color<- as.factor(x$color)][1]][1]
#plot
library(ggplot2)
ggplot(x, aes(x = trial, y = temperature, fill = color))+
geom_bar(position = "stack", stat = "identity")
请注意,在我的输出图像中,y 轴刻度与数据不对齐(请注意,条中的颜色与数据框中的“颜色”值不对应。发生了什么?
将值转换为因数后,记下数据水平。
levels(x$temperature) #This is correct
[1] "1" "5" "10" "20"
levels(x$color) #This is not correct
#[1] "blue" "orange" "red"
您需要 color
具有与它们出现的顺序相同的因子水平。一个简单的方法是使用 fct_inorder
。您可以使用 scale_fill_identity
为条形分配与 color
列中相同的颜色。
library(tidyverse)
x %>%
mutate(across(c(color, temperature), ~fct_inorder(as.character(.)))) %>%
ggplot(aes(x = trial, y = temperature, fill = color))+
geom_bar(position = "stack", stat = "identity") +
scale_fill_identity()
我正在尝试创建一个不对填充值求和的堆叠条形图。例如,假设我有一个随着温度 (y) 升高而改变颜色的解决方案。我想要一个条形图,显示颜色随温度升高沿 y 轴上升。我基本上成功地做到了这一点,但是 y 轴刻度不正确
示例数据:
x<- data.frame(color = c("red", "blue", "red", "orange"), temperature = c(1, 5, 10, 20), trial = c(1, 1, 1, 1))
x
color temperature trial
1 red 1 1
2 blue 5 1
3 red 10 1
4 orange 20 1
注意只有一次试炼,所以只有一次试炼才会有一根吧。另请注意,当温度达到 5 时,颜色从红色变为蓝色,然后当温度达到 10 时,颜色从蓝色变为红色。我希望条形图沿 y 轴以类似的方式改变颜色。当我绘制它时,y 轴刻度线是错误的:
[![#Convert to factors for plotting
x$temperature<- as.factor(x$temperature)
x$color<- as.factor(x$color)][1]][1]
#plot
library(ggplot2)
ggplot(x, aes(x = trial, y = temperature, fill = color))+
geom_bar(position = "stack", stat = "identity")
请注意,在我的输出图像中,y 轴刻度与数据不对齐(请注意,条中的颜色与数据框中的“颜色”值不对应。发生了什么?
将值转换为因数后,记下数据水平。
levels(x$temperature) #This is correct
[1] "1" "5" "10" "20"
levels(x$color) #This is not correct
#[1] "blue" "orange" "red"
您需要 color
具有与它们出现的顺序相同的因子水平。一个简单的方法是使用 fct_inorder
。您可以使用 scale_fill_identity
为条形分配与 color
列中相同的颜色。
library(tidyverse)
x %>%
mutate(across(c(color, temperature), ~fct_inorder(as.character(.)))) %>%
ggplot(aes(x = trial, y = temperature, fill = color))+
geom_bar(position = "stack", stat = "identity") +
scale_fill_identity()