ggplot 版本的点图
ggplot version of dotplot
想知道如何使用 ggplot 或 plotly 库函数绘制此点图。还要在各个点上标记 mpg 值。
# Dotplot: Grouped Sorted and Colored
# Sort by mpg, group and color by cylinder
x <- mtcars[order(mtcars$mpg),] # sort by mpg
x$cyl <- factor(x$cyl) # it must be a factor
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"
dotchart(x$mpg,labels=row.names(x),cex=.7,groups= x$cyl,
main="Gas Milage for Car Models\ngrouped by cylinder",
xlab="Miles Per Gallon", gcolor="black", color=x$color)
通过将行名快速清理为一列,您可以执行以下操作。
我们使用了 factor()
的颜色美学,使其变得离散/
当要实现这种外观时,您需要为 scale
和 space
.
指定 "free_y"
基地
library(tidyverse)
mtcars2 = rownames_to_column(mtcars, "car")
ggplot(mtcars2, aes(x = mpg, y = factor(car), color = factor(cyl))) +
geom_point(shape = 1) +
facet_grid(cyl ~ ., scales = "free_y", space = "free_y") +
theme_bw() +
theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(size=.1, color="grey90"),
legend.position = "none") +
ggtitle("Gas Milage for Car Models\ngrouped by cylinder") +
xlab("Miles Per Gallon") +
ylab("")
添加文本
ggplot(mtcars2, aes(x = mpg, y = factor(car), color = factor(cyl))) +
geom_point(shape = 1) +
geom_text(aes(label = mpg), colour = "grey40", size = 3, hjust = -0.3) +
facet_grid(cyl ~ ., scales = "free_y", space = "free_y") +
theme_bw() +
theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(size=.1, color="grey90"),
legend.position = "none") +
ggtitle("Gas Milage for Car Models\ngrouped by cylinder") +
xlab("Miles Per Gallon") +
ylab("")
您或许可以使用 geom_label
,但 geom_text
在这里效果很好。
稍微修改@zacdav 的答案以使用 forcats
:
对每个组内的点进行排序
library(tidyverse)
library(forcats)
mtcars2 = rownames_to_column(mtcars, "car") %>%
mutate(car_ordered = fct_reorder2(car, cyl, mpg, .desc = FALSE))
ggplot(mtcars2, aes(x = mpg, y = car_ordered, color = factor(cyl))) +
geom_point(shape = 1) +
geom_text(aes(label = mpg), colour = "grey40", size = 3, hjust = -0.3) +
facet_grid(cyl ~ ., scales = "free_y", space = "free_y") +
theme_bw() +
theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(size=.1, color="grey90"),
legend.position = "none") +
ggtitle("Gas Milage for Car Models\ngrouped by cylinder") +
xlab("Miles Per Gallon") +
ylab("")
想知道如何使用 ggplot 或 plotly 库函数绘制此点图。还要在各个点上标记 mpg 值。
# Dotplot: Grouped Sorted and Colored
# Sort by mpg, group and color by cylinder
x <- mtcars[order(mtcars$mpg),] # sort by mpg
x$cyl <- factor(x$cyl) # it must be a factor
x$color[x$cyl==4] <- "red"
x$color[x$cyl==6] <- "blue"
x$color[x$cyl==8] <- "darkgreen"
dotchart(x$mpg,labels=row.names(x),cex=.7,groups= x$cyl,
main="Gas Milage for Car Models\ngrouped by cylinder",
xlab="Miles Per Gallon", gcolor="black", color=x$color)
通过将行名快速清理为一列,您可以执行以下操作。
我们使用了 factor()
的颜色美学,使其变得离散/
当要实现这种外观时,您需要为 scale
和 space
.
"free_y"
基地
library(tidyverse)
mtcars2 = rownames_to_column(mtcars, "car")
ggplot(mtcars2, aes(x = mpg, y = factor(car), color = factor(cyl))) +
geom_point(shape = 1) +
facet_grid(cyl ~ ., scales = "free_y", space = "free_y") +
theme_bw() +
theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(size=.1, color="grey90"),
legend.position = "none") +
ggtitle("Gas Milage for Car Models\ngrouped by cylinder") +
xlab("Miles Per Gallon") +
ylab("")
添加文本
ggplot(mtcars2, aes(x = mpg, y = factor(car), color = factor(cyl))) +
geom_point(shape = 1) +
geom_text(aes(label = mpg), colour = "grey40", size = 3, hjust = -0.3) +
facet_grid(cyl ~ ., scales = "free_y", space = "free_y") +
theme_bw() +
theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(size=.1, color="grey90"),
legend.position = "none") +
ggtitle("Gas Milage for Car Models\ngrouped by cylinder") +
xlab("Miles Per Gallon") +
ylab("")
您或许可以使用 geom_label
,但 geom_text
在这里效果很好。
稍微修改@zacdav 的答案以使用 forcats
:
library(tidyverse)
library(forcats)
mtcars2 = rownames_to_column(mtcars, "car") %>%
mutate(car_ordered = fct_reorder2(car, cyl, mpg, .desc = FALSE))
ggplot(mtcars2, aes(x = mpg, y = car_ordered, color = factor(cyl))) +
geom_point(shape = 1) +
geom_text(aes(label = mpg), colour = "grey40", size = 3, hjust = -0.3) +
facet_grid(cyl ~ ., scales = "free_y", space = "free_y") +
theme_bw() +
theme(panel.grid = element_blank(),
panel.grid.major.y = element_line(size=.1, color="grey90"),
legend.position = "none") +
ggtitle("Gas Milage for Car Models\ngrouped by cylinder") +
xlab("Miles Per Gallon") +
ylab("")