R “少一个”;“银行标识代码”;玫瑰图中的数据处理

R “少一个”;“银行标识代码”;玫瑰图中的数据处理,r,ggplot2,R,Ggplot2,我遵循下面的教程,在这里可以复制/粘贴 在我的安装程序中,当我运行此程序时,会出现一个错误 Error: Width` is deprecated. Do you want `geom_bar()`? 所以我用geom_hist交换geom_bar,使我的代码 ggplot(eventdata, aes(x = eventhour)) + geom_bar(breaks = seq(0, 24), width = 1, colour = "grey") + coord_polar(start

我遵循下面的教程,在这里可以复制/粘贴

在我的安装程序中,当我运行此程序时,会出现一个错误

Error: Width` is deprecated. Do you want `geom_bar()`?
所以我用
geom_hist
交换
geom_bar
,使我的代码

ggplot(eventdata, aes(x = eventhour)) + geom_bar(breaks = seq(0, 24), width = 1, colour = "grey") + coord_polar(start = 0) + theme_minimal() + scale_fill_brewer() + ylab("Count") + ggtitle("Events by Time of day") + scale_x_continuous("", limits = c(0, 24), breaks = seq(0, 24), labels = seq(0, 24))
然而,我得到的图表却大不相同。检查时,它似乎“丢失”了从午夜到凌晨1点的数据(00:00:00到00:59:59,event_hour=0)

我试着在我自己的数据集(下面的dput)上运行这个,我得到了一个类似的奇怪错误……它将“0”垃圾桶和“23”垃圾桶组合在一起,给了我一个巨大的垃圾桶

gplotAll = ggplot( eventdataAll, aes(x=eventdataAll$eventhour) ) +
  geom_histogram(breaks=seq(0,24), colour="purple") + coord_polar(start=0) +
  theme_minimal() + scale_fill_manual(values="blue") + ylab("Frequency") + 
  ggtitle("All Sources") + scale_x_continuous("", limits=c(0,24), 
  breaks=seq(0,24), labels=seq(0,24))

注意,这是我的数据的一个很小的子集,因为它有数百万个时间戳

dput(eventdataAll[1:100,] )

structure(list(datetime = structure(c(1499433307, 1499428942, 
1499426105, 1499422506, 1499466293, 1499408104, 1499476505, 1499411705, 
1499400905, 1499466368, 1499454358, 1499453483, 1499405930, 1499484602, 
1499483709, 1499480109, 1499408108, 1499445444, 1499439817, 1499427520, 
1499418054, 1499416518, 1499414449, 1499410178, 1499409748, 1499409317, 
1499405867, 1499402279, 1499485071, 1499481544, 1499481527, 1499481459, 
1499481423, 1499481407, 1499477859, 1499475634, 1499474292, 1499474275, 
1499474253, 1499470435, 1499468435, 1499468413, 1499468398, 1499467032, 
1499464834, 1499463580, 1499463425, 1499461391, 1499460152, 1499460150, 
1499459806, 1499459745, 1499459366, 1499458914, 1499458463, 1499458012, 
1499457635, 1499457619, 1499455777, 1499454624, 1499454035, 1499454020, 
1499452801, 1499452695, 1499450434, 1499450414, 1499450404, 1499450403, 
1499450156, 1499446834, 1499446818, 1499446803, 1499445621, 1499444273, 
1499443234, 1499443218, 1499443201, 1499441873, 1499441806, 1499441700, 
1499441096, 1499441095, 1499440418, 1499440417, 1499436056, 1499434899, 
1499432434, 1499431018, 1499428801, 1499427491, 1499425201, 1499423442, 
1499421620, 1499421134, 1499427667, 1499421549, 1499472830, 1499451306, 
1499450792, 1499482802), class = c("POSIXct", "POSIXt"), tzone = ""), 
    eventhour = c(9L, 8L, 7L, 6L, 18L, 2L, 21L, 3L, 0L, 18L, 
    15L, 14L, 1L, 23L, 23L, 22L, 2L, 12L, 11L, 7L, 5L, 4L, 4L, 
    2L, 2L, 2L, 1L, 0L, 23L, 22L, 22L, 22L, 22L, 22L, 21L, 21L, 
    20L, 20L, 20L, 19L, 19L, 19L, 18L, 18L, 18L, 17L, 17L, 17L, 
    16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 15L, 15L, 
    15L, 15L, 14L, 14L, 14L, 14L, 14L, 14L, 13L, 13L, 13L, 13L, 
    12L, 12L, 12L, 12L, 12L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
    10L, 9L, 9L, 8L, 8L, 7L, 7L, 6L, 6L, 5L, 7L, 5L, 20L, 14L, 
    14L, 23L)), .Names = c("datetime", "eventhour"), row.names = c(NA, 
100L), class = "data.frame")
有什么消息吗

(1) 为什么第一个复制/粘贴的示例没有在图中提供“0”的数据

(2) 为什么我的示例将“23”和“0”bin组合在一起

非常感谢

编辑--下面的代码修复了该问题,但给出了警告。我不认为这个警告是个问题,但我很好奇是否有人能解释这一点。我认为最初的问题是R将中断解释为(val1,val2),而不是我预期的[val1,val2]。因此,0分组从未保留。将中断更改为seq(-1:23)现在包含所有值0到23

修复方法:

gplotAll = ggplot( eventdataAll, aes(x=eventdataAll$eventhour) ) + 
  geom_histogram(breaks=seq(-1,24), colour="purple") + coord_polar(start=0) +
  theme_minimal() + scale_fill_manual(values="purple") + ylab("Frequency") + 
  ggtitle("All Sources") + scale_x_continuous("", limits=c(-1,23), 
  breaks=seq(-1,23), labels=seq(0,2) )
警告:

Removed 1 rows containing missing values (geom_bar). 

您的数据是连续的,因为
eventhour
是数字,但
eventhour
的行为类似于一个有序的分类变量,因为所有
eventhour
值都是一天中的整数小时。因此,您可以使用
geom\u条形图
geom\u柱状图
进行绘图。我将使用
geom\u条形图(用于分类数据)在下面的示例中,然后在末尾显示一个带有
geom_直方图
(用于连续数据)的版本

使用
geom_bar
时出现的问题是,条形图放置在整数小时上,但默认宽度为1个单位。这意味着,由于其宽度有限,条形图位于零(午夜)在零以下扩展0.5个单位。当您将x轴限制设置为零时,零处的条形将被排除,因为
scale\u x\u continuous
排除
限制范围之外的数据。但是,如果将限制设置为-0.5,则极坐标不再是0-24小时时钟

我将在下面展示多个示例,但它们都有一些类似的绘图元素,所以让我们将这些常用元素保存在一个可以重用的对象中

my_plot = list(coord_polar(start=0),
               geom_bar(colour="grey"),
               theme_minimal(),
               scale_fill_brewer(),
               ylab("Count"))
现在让我们看看没有
coord\u polar
(我们通过执行
my\u plot[-1]
)来排除
coord\u polar
中的
coord\u polar
状态。请注意,当条形宽度超出x范围(下面的第一个图)时,午夜(
eventhour
=0)的条形图是如何排除的但是,当我们将范围扩展到-0.5(下面的第二个图)时会出现,这是条的边缘

ggplot(eventdata, aes(x = eventhour)) + 
  my_plot[-1] +
  scale_x_continuous(limits = c(0,24), breaks=0:23) +
  ggtitle("x-limits: c(0,24)")

ggplot(eventdata, aes(x = eventhour)) + 
  my_plot[-1] +
  scale_x_continuous(limits = c(-0.5,24), breaks=0:23) + 
  ggtitle("x-limits: c(-0.5,24)")

现在,让我们将
coord_polar
添加到上面的第二个绘图中。代码就在下面,绘图在下面的左侧。请注意,0现在是顺时针旋转的,并且在0之前还有一个额外的半小时楔子

为了解决这些问题,我们将更改
coord_polar
语句,将绘图逆时针旋转7.5度(圆圈的1/48),并将限制更改为23.5而不是24,从而从绘图的另一端移除半小时。这不会移除任何数据,因为最高小时值为23

我们还删除了次要网格线,以消除在23.5小时时出现的不需要的网格线。实际上,在所有的半小时内都有次要网格线,但这个网格线会被绘制两次(因为它同时表示-0.5小时和23.5小时)因此它比其他的更突出。我们不需要小网格线,所以我们只需要完全去掉它们

此绘图的代码是下面第二个
ggplot
块,绘图在右侧

ggplot(eventdata, aes(x = eventhour)) + 
  my_plot +
  scale_x_continuous(limits = c(-0.5,24), breaks=0:23) +
  ggtitle("x-limits: c(-0.5,24)")

ggplot(eventdata, aes(x = eventhour)) + 
  my_plot[-1] +
  scale_x_continuous(limits = c(-0.5,23.5), breaks=0:23) +
  ggtitle("x-limits: c(-0.5,23.5)")  +
  coord_polar(start=-48/360) +
  theme(panel.grid.minor=element_blank())

因此,最终的绘图代码是:

ggplot(eventdata, aes(x=eventhour)) + 
  geom_bar(colour="grey") + 
  theme_minimal() +
  scale_fill_brewer() +
  ylab("Count") +
  coord_polar(start=-48/360) +
  scale_x_continuous(limits=c(-0.5,23.5), breaks=0:23) +
  theme(panel.grid.minor=element_blank())
下面是带有
geom_柱状图的等效图。
binwidth=1
表示每个条形宽1小时。
center=0
确保每个条形以整数为中心(我们可以在此处选择任何整数而不是0)。在某些情况下,垃圾箱在左侧还是右侧关闭也很重要(如果我们在这里设置,比如说,
center=0.5
),这也很重要)。您可以使用
closed
参数;
closed=“right”
closed=“left”
来设置


您发布的修复程序给了我一个错误
错误:中断和标签必须具有相同的长度
警告意味着ggplot实际上从绘图中删除了数据(可能是23小时的数据),因此没有包括所有数据。有关解释,请参阅。
ggplot(eventdata, aes(x=eventhour)) + 
  geom_histogram(colour="grey", center=0, binwidth=1) + 
  theme_minimal() +
  scale_fill_brewer() +
  ylab("Count") +
  coord_polar(start=-48/360) +
  scale_x_continuous(limits=c(-0.5,23.5), breaks=0:23) +
  theme(panel.grid.minor=element_blank())