我需要生成一个带有条形图的图表,用于两个变量和一个带有第三个变量的行。
我可以为一个变量创建一个列图,如下所示
df <- head(mtcars)
df$car <- row.names(df)
ggplot(df) + geom_col(aes(x=car, y=disp))
参考this回答 - 我可以绘制两个变量 - disp
和hp
,如下所示
library(tidyr)
df$car = row.names(df)
df_long = gather(df, key = var, value = value, disp, hp)
ggplot(df_long, aes(x = car, y = value, fill = var)) +
geom_bar(stat = 'identity', position = 'dodge')
我需要将第三个变量qsec
绘制成一条线,如下图所示 - 如何解决这个问题?
答案 0 :(得分:0)
您需要另一个图层,因为geom_line
用于连续数据,您需要做的就像您的x值是针对线图层一样。通过这样做,数据的顺序变得至关重要,因此您还需要对其进行排序:
gather(df, key = var, value = value, disp, hp, qsec) %>%
arrange(car) %>%
{
print(
ggplot() +
geom_bar(stat = 'identity', position = 'dodge', data = filter(., var != "qsec"), mapping = aes(x = car, y = value, fill = var)) +
geom_line(mapping = aes(x = 1:length(car), y = value), data = filter(., var == "qsec"))
)
}
修改强>
顺便说一句,您可以通过调用qsec
来检查plotly::ggplotly()
到相应x值的正确顺序,然后您可以更好地阅读这些值并将它们与df
进行比较,因为如果你指向元素,他们会出现......
答案 1 :(得分:0)