r - 为正负水平条形图添加颜色
问题描述
我想创建一个图表来代表每个人的预计收入与收集的收入,但我不知道该怎么做。目标是将负差异绘制为红色垂直条,将正差异绘制为黑色。
ggplot(appts2,
aes(Provider, Difference),
main = "Difference in Projected vs Actual Revenue") +
geom_bar(fill = ifelse(appts2$Difference < 0, "red", "black"), stat = 'identity') +
coord_flip()
有效,但没有正确着色。
Provider Revenue Visits Ave Total Add Ons Total Scheduled Total Seen Total Not Seen TotalBatchVisits ProjectedRevenue Difference MissingRecords
Smith 40911 539 75.9 38 438 404 82 486 36887.4 -4023.6 53
Antonio 4827 63 76.62 7 88 60 35 95 7278.9 2451.9 -32
Jackson 13832 171 80.89 32 155 161 20 181 14641.09 809.09 -10
Redding 23030 278 82.84 25 164 144 34 178 14745.52 -8284.48 100
解决方案
您可以通过将“填充”美学设置为逻辑语句来完成此操作,例如Difference < 0
. 然后, ggplot将根据条形是小于还是大于零来填充条形。
切勿在(您引用)中使用$
运算符。相反,请使用裸列名称,然后ggplot将在提供的数据集中搜索该名称。ggplot在绘制数据之前对其进行排序,因此提供外部向量可能会导致与其预期顺序发生奇怪的冲突。aes()
appts2$Difference
$
library(ggplot2)
set.seed(1)
df <- data.frame(category = letters[1:10], difference = rnorm(10))
g <- ggplot(data = df, aes(y = difference, x = category, fill = difference < 0)) +
geom_col() +
coord_flip()
print(g)
推荐阅读
- c# - .net core 3 的 Get 处理程序中显示 NULL 的参数
- c++ - 为什么使用大括号进行复制初始化会忽略复制/移动构造?
- python - 如何从列表中找到最近的解决方案
- typescript - TypeScript 中的交集和合并类型 `{ foo } & { bar }` 和 `{ foo, bar }` 之间的区别
- brainfuck - Brainfuck 尝试 - 在 0 单元格中
- python - 需要帮助来提高 pandas groupby 的效率
- sql - 如何检查数据库插入语句需要哪些列?
- reactjs - 为什么使用 Rebass over Theme UI?
- python - 从多级字典创建平面数据框的最好(和最快)方法是什么
- android - 使用 distinctUntilChanged() 转换的 LiveData 返回 null