真的很奇怪,如果我尝试根据满足的条件分配轴标签的颜色,返回的图标的轴标签颜色与标准不符。
例如
p <- ggplot(mtcars, aes(x=as.factor(cyl), y=mpg)) +
geom_boxplot()
p + theme(axis.text.x = element_text(color = ifelse(mtcars$cyl==4, "red", "black"), angle = 90, hjust = 1))
返回一个框图,其中&#34; 8&#34;被标记为红色,&#34; 4&#34;和&#34; 6&#34;是黑色的。但是,如果我在任何情况下都设置了不正确的条件,例如:
p <- ggplot(mtcars, aes(x=as.factor(cyl), y=mpg)) +
geom_boxplot()
p + theme(axis.text.x = element_text(color = ifelse(mtcars$cyl=="something", "red", "black"), angle = 90, hjust = 1))
所有标签均为黑色。
如果我选择一个他们都满足的条件,它们都是红色的,例如:
p <- ggplot(mtcars, aes(x=as.factor(cyl), y=mpg)) +
geom_boxplot()
p + theme(axis.text.x = element_text(color = ifelse(mtcars$cyl < 100, "red", "black"), angle = 90, hjust = 1))
然而,只有一些人符合标准,我得到随机结果。
p <- ggplot(mtcars, aes(x=as.factor(cyl), y=mpg)) +
geom_boxplot()
p + theme(axis.text.x = element_text(color = ifelse(mtcars$cyl < 5, "red", "black"), angle = 90, hjust = 1))
仅返回8为红色,
p <- ggplot(mtcars, aes(x=as.factor(cyl), y=mpg)) +
geom_boxplot()
p + theme(axis.text.x = element_text(color = ifelse(mtcars$cyl < 7, "red", "black"), angle = 90, hjust = 1))
将所有这些都返回为红色。
有谁知道发生了什么?!任何帮助将非常感激。
答案 0 :(得分:4)
请注意,您的输入数据包含许多元素,而比例只包含三个元素,与您的数据级别相对应。
因此,您必须将向量传递给长度为3的scale_x_discrete
,而不是数据的长度。
breaks <- levels(as.factor(mtcars$cyl))
colours <- ifelse(breaks == 4, "red", "blue")
ggplot(mtcars, aes(x=as.factor(cyl), y=mpg)) +
geom_boxplot() +
scale_x_discrete("Cyl", breaks = breaks) +
theme(axis.text.x = element_text(color = colours, size = 16))
答案 1 :(得分:1)
您的ifelse
正在检查整个mtcars$cyl
向量,其值为:
`[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4`
因此,它返回值(对于第一个示例):
[1] "black" "black" "red" "black" "black" "black" "black" "red" "red" "black" "black" "black" "black" "black" "black" "black" "black" "red"
[19] "red" "red" "red" "black" "black" "black" "black" "red" "red" "red" "black" "black" "black" "red"
然后element_text
color
参数按顺序使用它们。它没有按照您的预期进行,即检查轴上x
的值。要做到这一点,请在单独的步骤中生成颜色,然后将它们传递给element_text
参数(@Andrie在其他答案中做得很好。)