在ggplot中使用条形图时出现意外的x轴刻度线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在ggplot中使用条形图时出现意外的x轴刻度线相关的知识,希望对你有一定的参考价值。

我正在尝试在ggplot中创建一个条形图,显示特定日期两个不同位置的利润。

这是我正在使用的代码:

test_data <- data.frame("location" = c('location_1', 'location_2',
                                   'location_1', 'location_2',
                                   'location_1', 'location_2',
                                   'location_1', 'location_2',
                                   'location_1', 'location_2',
                                   'location_1', 'location_2',
                                   'location_1', 'location_2',
                                   'location_1', 'location_2',
                                   'location_1', 'location_2'), 
                      "date" = c(as.Date('2018-07-29'), as.Date('2018-07-29'), 
                               as.Date('2018-07-30'), as.Date('2018-07-30'), 
                               as.Date('2018-08-02'), as.Date('2018-08-02'), 
                               as.Date('2018-08-03'), as.Date('2018-08-03'), 
                               as.Date('2018-08-05'), as.Date('2018-08-05'),
                               as.Date('2018-08-08'), as.Date('2018-08-08'),
                               as.Date('2018-08-12'), as.Date('2018-08-12'), 
                               as.Date('2018-08-15'), as.Date('2018-08-15'), 
                               as.Date('2018-08-19'), as.Date('2018-08-19')),
                    "profit" = c(540, 120, 265, 493, 245, 432, 987, 566,
                                 654, 765, 234, 767, 650, 765, 874, 652,
                                 175, 497), 
                    stringsAsFactors = FALSE) 

sundays <- c(as.Date('2018-07-29'),as.Date('2018-08-05'),
             as.Date('2018-08-12'),as.Date('2018-08-19'))

test_data %>% 
filter(date %in% sundays) %>% 
ggplot(aes(x=date, y=profit)) + 
geom_bar(stat = 'identity') +
xlab('Date') +
ylab('Profit') + 
facet_wrap(~location)

所以我想创建一个只显示星期日的图表,但是当它被绘制时,它会将错误的日期与条形相关联。

graph example

我该如何解决?提前致谢!

答案

检查此解决方案:

test_data %>%
  filter(date %in% sundays) %>%
  mutate(date = date %>% as.character()) %>%
  ggplot(aes(x=date, y=profit)) + 
  geom_bar(stat = 'identity') +
  xlab('Date') +
  ylab('Profit') + 
  facet_wrap(~location) +
  scale_x_discrete(
    labels = function(x) x %>% as.Date() %>% format('%b %d')
  )

Answer to question in comment:

我想出了一些“肮脏的黑客”,但我不确定它是否适用于所有情况。检查并告诉我。

library(tidyverse)
library(wrapr)

test_data %>%
  filter(date %in% sundays) %>%
  arrange(date) %>%
  group_by(location) %>%
  mutate(
    xpos = row_number(),
    xlab = if_else(xpos %% 2 == 0, '', date %>% as.Date() %>% format('%b %d'))
  ) %.>%
  ggplot(
    data = .,
    aes(x = factor(xpos), y = profit)
  ) + 
  geom_bar(stat = 'identity') +
  xlab('Date') +
  ylab('Profit') + 
  facet_wrap(~location) +
  scale_x_discrete(
    breaks = .$xpos,
    labels = .$xlab 
  )

以上是关于在ggplot中使用条形图时出现意外的x轴刻度线的主要内容,如果未能解决你的问题,请参考以下文章

如何在 matplotlib 条形图上旋转 x 轴刻度标签?尝试了几种方法,都没有奏效

ggplot2用于带有两个相同刻度标签的条形图

ggplot饼图选择轴刻度

如何防止 Nivo 刻度轴文本中的文本截断(条形图)

R语言ggplot2可视化条形图可视化控制底部和x轴之间没有空格实战:即条形图的底部直接和坐标轴连接

在 D3.js 中创建带有序数刻度的文本标记 x 轴