当前位置: 首页 > 知识库问答 >
问题:

使用2个坐标数据点订购数据框/条形图-ggplot2

阎咏思
2023-03-14

我有数据,这些数据由一个2坐标数据点(例如[0,2])汇总。然而,我的数据框和条形图是按字母顺序排列的,即使坐标是因子数据类型。

数据帧/ggplot默认行为:[0,1]、[0,13]、[O,2]我希望发生的事情:[0.1]、[0,2]、[o,13]

此坐标变量是通过粘贴两列中的数字创建的

mutate(swimlane_coord = factor(paste0("[", sl_subsection_index, ",", sl_element_index, "]")))

其中sl_ subsection_index是整数并且sl_。

坐标可以有任何组合,因此我想避免手动强制因子定义。

以下是数据示例:

structure(list(application_type1 = c("SamsungTV", "SamsungTV", 
"SamsungTV", "SamsungTV", "SamsungTV", "SamsungTV", "SamsungTV", 
"SamsungTV", "SamsungTV", "SamsungTV", "SamsungTV", "SamsungTV", 
"SamsungTV", "SamsungTV"), variant_uuid = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Control", 
"BackNav"), class = "factor"), allStreamSec = c("curatedCatalog", 
"curatedCatalog", "curatedCatalog", "curatedCatalog", "curatedCatalog", 
"curatedCatalog", "curatedCatalog", "curatedCatalog", "curatedCatalog", 
"curatedCatalog", "curatedCatalog", "curatedCatalog", "curatedCatalog", 
"curatedCatalog"), swimlane_coord = structure(c(1L, 2L, 8L, 9L, 
10L, 21L, 1L, 2L, 8L, 9L, 10L, 11L, 25L, 29L), .Label = c("[0,0]", 
"[0,1]", "[0,10]", "[0,11]", "[0,12]", "[0,13]", "[0,14]", "[0,2]", 
"[0,3]", "[0,4]", "[0,5]", "[0,6]", "[0,7]", "[0,8]", "[0,9]", 
"[1,0]", "[1,1]", "[1,3]", "[1,4]", "[1,5]", "[1,7]", "[2,0]", 
"[2,11]", "[3,1]", "[3,11]", "[3,2]", "[3,5]", "[3,6]", "[3,7]", 
"[3,8]"), class = "factor"), ESPerVisitBySL = c(1.775, 1.83333333333333, 
0.976190476190476, 0.966666666666667, 1.08333333333333, 1, 1.33333333333333, 
1.45161290322581, 1.68965517241379, 1.44827586206897, 1.5, 1, 
1, 1), UESPerVisitBySL = c(13, 16.4, 8.80952380952381, 8.4, 9.33333333333333, 
1, 11.5555555555556, 17.741935483871, 16.3448275862069, 8.10344827586207, 
15.3571428571429, 6, 7, 2)), row.names = c(NA, -14L), groups = structure(list(
    application_type1 = c("SamsungTV", "SamsungTV"), variant_uuid = structure(1:2, .Label = c("Control", 
    "BackNav"), class = "factor"), allStreamSec = c("curatedCatalog", 
    "curatedCatalog"), .rows = structure(list(1:6, 7:14), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))

请注意,[3,11]在[3,2]之前。

我只加载了tidyverse和data.table.

谢谢你,哈利

共有1个答案

子车飞文
2023-03-14

为了达到你想要的结果,你可以

  1. sl_subsection_indexsl_element_index
  2. 安排您的data.frame
  3. 这样做之后,您可以使用forcat::fc
  4. 设置swimlane_coord的顺序
library(ggplot2)
library(dplyr)
library(forcats)

d %>%
  ungroup() %>%
  mutate(
    sl_subsection_index = gsub("^\\[(\\d+),\\d+\\]$", "\\1", swimlane_coord),
    sl_element_index = gsub("^\\[\\d+,(\\d+)\\]$", "\\1", swimlane_coord)
  ) %>%
  arrange(as.integer(sl_subsection_index), as.integer(sl_element_index)) %>%
  mutate(swimlane_coord = forcats::fct_inorder(factor(swimlane_coord))) %>% 
  ggplot(aes(swimlane_coord)) +
  geom_bar()

由reprex包(v2.0.0)于2021-06-04创建

 类似资料:
  • 我正在尝试使用angular chartjs创建一个条形图,我需要一个在每个条形图上都可见的数据标签 例子:http://jsfiddle.net/uh9vw0ao/ 我尝试了以下代码在js: html代码如下: 上面的代码给出了数据集未定义的错误。和数据标签不可见。 请帮忙。

  • 我目前正在尝试跟踪一个人的动作,并将其保存到数据库中。 在我的网页上有一个画布,它允许用户使用鼠标进行绘画。我希望能够保存用户在绘画时所做的动作,以便我能够重新跟踪绘画时所做的每一个动作。 我自己的想法是,每当用户在画布中单击鼠标时,坐标将被保存,直到用户释放鼠标按钮。另一个解决方案是,在画布上每点击3-4次,就保存一张画布的图像,这样你就可以看到绘制过程。 有没有人有更好的解决方案,或者关于如何

  • 我很难创建一个条形图,其中包含两个不同的y轴和每个x值(类别)的两个条形图。我有不同类型的数据类别(见下文),每个类别我都有两个值,我想并排绘制(和)。但是,每个类别的值相距甚远,这使得类别的条形几乎不可见。因此,我想添加第二个y轴(一个用于,一个用于),以允许在两个类别之间进行比较。 示例数据: 我使用下面的R代码(ggplot2)来创建绘图: 和,但我没有设法将y轴分配给数据类型。 我很高兴每

  • 问题内容: 大家好!长话短说,如果您不介意向这个新手PHPer伸出援手的话。:) 我有一个名为“类别”的数据库字段,其中存储有以下内容: 我在数据库中还有一个单独的表,其中每个项目的字段中都有具有这些类别名称的项目。现在,该脚本(我想对其进行分叉)使用: 为了显示所有可用类别的列表。很简单吧? Welllllll .....我不想按ASC排序,我想按我提到的第一个Categories字段中的项目列

  • 我正在尝试实现chartJS条形图,并使用图例过滤条形图。我想将标签列表设置为空,因为这样可以清楚地删除条。我正在寻找一种在X轴上设置标记的方法,因为现在文本中的标记为空。 JSIDLE: https://jsfiddle.net/m1eorjwv/1/ 非常感谢,阿龙

  • 问题内容: 这是我的pandas数据帧’df’: I want to plot 3 groups of bar chart (according to ): for each channel: plot control booked value vs treatment booked value. hence i should get 6 bar charts, in 3 groups where