ggplot2を使用したExcelグラフィック

Iwannabe Theguy

私の会社はRでレポートを作成したいと考えており、Excelレポートをできるだけ同じに保ちたいと考えています。ggplot2に、Excelで得られる安っぽい3Dの外観を維持する方法はありますか?以下のようなプロットを作成したいと思います。

ここに画像の説明を入力してください

私は近づくことができました。これが私がこれまでに持っているものです:

gender <- c("Male", "Male", "Female", "Male", "Male", "Female", "Male", "Male", "Female", "Male", 
                          "Male", "Female")
race <- c("African American", "Caucasian", "Hispanic", "African American", "African American", 
                      "Caucasian", "Hispanic", "Other", "African American", "Caucasian", "African American", 
                      "Other")

data <- as.data.frame(cbind(gender, race))


gender_data <- data %>%
  count(gender = factor(gender)) %>%
  ungroup() %>%
  mutate(pct = prop.table(n))


race_data <- data %>%
  count(race = factor(race)) %>%
  ungroup() %>%
  mutate(pct = prop.table(n))


names(race_data)[names(race_data) == 'race'] <- 'value'
names(gender_data)[names(gender_data) == 'gender'] <- 'value'



# Function for fixing x axis that creeps into other values
addline_format <- function(x,...){
  gsub('\\s','\n',x)
}

ggplot() +
          geom_bar(stat = 'identity', position = 'dodge', fill = "#5f1b46",
                   aes(x = gender_data$value, y = gender_data$pct)) +
          geom_bar(stat = 'identity', position = 'dodge', fill = "#3b6b74",
                   aes(x = race_data$value, y = race_data$pct)) +
          geom_text(aes(x = gender_data$value, y = gender_data$pct + .03, 
                        label = paste0(round(gender_data$pct * 100, 0), '%')),
                    position = position_dodge(width = .9), size = 5) +
          geom_text(aes(x = race_data$value, y = race_data$pct + .03, 
                        label = paste0(round(race_data$pct * 100, 0), '%')),
                    position = position_dodge(width = .9), size = 5) +
          scale_x_discrete(limits = c("Male", "Female", "African American", "Caucasian", "Hispanic", "Other"),
                           breaks = unique(c("Male", "Female", "African American", "Caucasian", "Hispanic", 
                                             "Other")),
                           labels = addline_format(c("Male", "Female", "African American", "Caucasian", 
                                                     "Hispanic", "Other"))) +
          labs(x = '', y = '') +
          scale_y_continuous(labels = scales::percent,
                     breaks = seq(0, 1, .2)) +
          expand_limits(y = c(0, 1)) +
          theme(panel.grid.major.x = element_blank() ,
                panel.grid.major.y = element_line( size=.1, color="light gray"),
                panel.background = element_rect(fill = '#f9f3e5'),
                plot.background = element_rect(fill = '#f9f3e5'))

出力は以下のとおりです。この時点で、助けていただければ幸いです。また、誰かがそれを手伝ってくれるなら、性別と人種のフィールドの間にスペースを入れる必要があります:

ここに画像の説明を入力してください

Z.Lin

Excelの疑似3Dグラフは問題でいっぱいだということには誰もが同意していると思いますが、給料に署名する人と妥協しなければならない状況には共感します。

また、もっと趣味が必要です。

非常に醜いプロット

ステップ1.データ(つまり通常のもの)のロードと再形成:

library(dplyr); library(tidyr)

# original data as provided by OP
gender <- c("Male", "Male", "Female", "Male", "Male", "Female", "Male", "Male", "Female", "Male", 
            "Male", "Female")
race <- c("African American", "Caucasian", "Hispanic", "African American", "African American", 
          "Caucasian", "Hispanic", "Other", "African American", "Caucasian", "African American", 
          "Other")
data <- as.data.frame(cbind(gender, race))

# data wrangling
data.gather <- data %>% gather() %>%
  group_by(key, value) %>% summarise(count = n()) %>%
  mutate(prop = count / sum(count)) %>% ungroup() %>%
  mutate(value = factor(value, levels = c("Male", "Female", "African American",
                                          "Caucasian", "Hispanic", "Other")),
         value.int = as.integer(value))

rm(data, gender, race)

ステップ2.3Dエフェクトバー(つまり、歯ごたえのあるもの)のポリゴン座標を定義します。

# top
data.polygon.top <- data.gather %>%
  select(key, value.int, prop) %>%
  mutate(x1 = value.int - 0.25, y1 = prop,
         x2 = value.int - 0.15, y2 = prop + 0.02,
         x3 = value.int + 0.35, y3 = prop + 0.02,
         x4 = value.int + 0.25, y4 = prop) %>%
  select(-prop) %>%
  gather(k, v, -value.int, -key) %>%
  mutate(dir = str_extract(k, "x|y")) %>%
  mutate(k = as.integer(gsub("x|y", "", k))) %>%
  spread(dir, v) %>%
  rename(id = value.int, order = k) %>%
  mutate(group = paste0(id, ".", "top"))

# right side
data.polygon.side <- data.gather %>%
  select(key, value.int, prop) %>%
  mutate(x1 = value.int + 0.25, y1 = 0,
         x2 = value.int + 0.25, y2 = prop,
         x3 = value.int + 0.35, y3 = prop + 0.02,
         x4 = value.int + 0.35, y4 = 0.02) %>%
  select(-prop) %>%
  gather(k, v, -value.int, -key) %>%
  mutate(dir = str_extract(k, "x|y")) %>%
  mutate(k = as.integer(gsub("x|y", "", k))) %>%
  spread(dir, v) %>%
  rename(id = value.int, order = k) %>%
  mutate(group = paste0(id, ".", "bottom"))

data.polygon <- rbind(data.polygon.top, data.polygon.side)
rm(data.polygon.top, data.polygon.side)

ステップ3.それをまとめる:

ggplot(data.gather,
       aes(x = value.int, group = value.int, y = prop, fill = key)) +

  # "floor" of 3D panel
  geom_rect(xmin = -5, xmax = 10, ymin = 0, ymax = 0.02,
            fill = "grey", color = "black") +

  # background of 3D panel (offset by 2% vertically)
  geom_hline(yintercept = seq(0, 1, by = 0.2) + 0.02, color = "grey") +

  # 3D effect on geom bars
  geom_polygon(data = data.polygon,
               aes(x = x, y = y, group = group, fill = key),
               color = "black") +

  geom_col(width = 0.5, color = "black") +
  geom_text(aes(label = scales::percent(prop)),
            vjust = -1.5) +
  scale_x_continuous(breaks = seq(length(levels(data.gather$value))),
                     labels = levels(data.gather$value),
                     name = "", expand = c(0.2, 0)) +
  scale_y_continuous(breaks = seq(0, 1, by = 0.2),
                     labels = scales::percent, name = "",
                     expand = c(0, 0)) +
  scale_fill_manual(values = c(gender = "#5f1b46",
                               race = "#3b6b74"),
                    guide = F) +
  facet_grid(~key, scales = "free_x", space = "free_x") +
  theme(panel.spacing = unit(0, "npc"), #remove spacing between facets
        strip.text = element_blank(), #remove facet header
        axis.line = element_line(colour = "black", linetype = 1),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_rect(fill = '#f9f3e5'),
        plot.background = element_rect(fill = '#f9f3e5'))

注:geom_rect()/ geom_hline()/ geom_polygon()geomsをコメントアウトし、ファセット間隔/ヘッダーを非表示にするのをやめるとtheme()、これはほとんど見栄えがします...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ggplot2を使用したグラフ

分類Dev

複数のファセットを使用して ggplot2 のグラフィックを再生する

分類Dev

ggplot2、geom_smooth、nlsを使用したフィッティング

分類Dev

ggraph / ggplot2を使用したネットワークグラフでのノードとエッジの配置

分類Dev

ggplot2を使用した複数の折れ線グラフ

分類Dev

ggplot2を使用したRの棒グラフ

分類Dev

ggplot2 を使用した複数の棒グラフ

分類Dev

ggplot2を使用してフィルター処理された列の棒グラフを作成する

分類Dev

ggplot2を使用した特定の期間のタウ(時定数)のフィッティング

分類Dev

ggplot2を使用した特定の期間のタウ(時定数)のフィッティング

分類Dev

ggplot2を使用したグループ化された棒グラフ

分類Dev

ggplot2を使用したRの積み上げ棒グラフ(Excelでは不可能)

分類Dev

ggplot2の「grid.arrange」を使用して特定の位置にグラフィックなしでギャップを残す方法

分類Dev

ggplot2の上にベースRグラフィックをオーバーレイします

分類Dev

ggplot2折れ線グラフを使用したクレイジーライン

分類Dev

2つのカテゴリ変数を使用したggplot2棒グラフ

分類Dev

C#を使用した2Dグラフィックス

分類Dev

ggplot2はR基本グラフィックスのいくつかのパラメーターを使用/継承しますか?

分類Dev

ggplot2を使用してRで背景が透明なグラフィックを作成するにはどうすればよいですか?

分類Dev

geom_pointrange()タイプのグラフィックにggplot2を使用して凡例キーの垂直線を取得する方法

分類Dev

ggplot2を使用して比率棒グラフをプロットする

分類Dev

bquoteを使用したggplot2ファセットラベラー

分類Dev

高解像度のggplot2を使用した透明な背景グラフ、R

分類Dev

ggplot2を使用したサイドバイサイド円グラフ

分類Dev

ggplot2を使用した3方向グラフ(変数、平均、sd)

分類Dev

ggplot2を使用した3方向グラフ(変数、平均、sd)

分類Dev

ggplot2を使用した5次元の積み上げ棒グラフ

分類Dev

Rグラフィックス/ ggplot2は、強調表示された「アクティブ」ラインとグレーアウトされた他のラインでファセットを再現します

分類Dev

ggplot2とdplyrを使用したプログラミング

Related 関連記事

  1. 1

    ggplot2を使用したグラフ

  2. 2

    複数のファセットを使用して ggplot2 のグラフィックを再生する

  3. 3

    ggplot2、geom_smooth、nlsを使用したフィッティング

  4. 4

    ggraph / ggplot2を使用したネットワークグラフでのノードとエッジの配置

  5. 5

    ggplot2を使用した複数の折れ線グラフ

  6. 6

    ggplot2を使用したRの棒グラフ

  7. 7

    ggplot2 を使用した複数の棒グラフ

  8. 8

    ggplot2を使用してフィルター処理された列の棒グラフを作成する

  9. 9

    ggplot2を使用した特定の期間のタウ(時定数)のフィッティング

  10. 10

    ggplot2を使用した特定の期間のタウ(時定数)のフィッティング

  11. 11

    ggplot2を使用したグループ化された棒グラフ

  12. 12

    ggplot2を使用したRの積み上げ棒グラフ(Excelでは不可能)

  13. 13

    ggplot2の「grid.arrange」を使用して特定の位置にグラフィックなしでギャップを残す方法

  14. 14

    ggplot2の上にベースRグラフィックをオーバーレイします

  15. 15

    ggplot2折れ線グラフを使用したクレイジーライン

  16. 16

    2つのカテゴリ変数を使用したggplot2棒グラフ

  17. 17

    C#を使用した2Dグラフィックス

  18. 18

    ggplot2はR基本グラフィックスのいくつかのパラメーターを使用/継承しますか?

  19. 19

    ggplot2を使用してRで背景が透明なグラフィックを作成するにはどうすればよいですか?

  20. 20

    geom_pointrange()タイプのグラフィックにggplot2を使用して凡例キーの垂直線を取得する方法

  21. 21

    ggplot2を使用して比率棒グラフをプロットする

  22. 22

    bquoteを使用したggplot2ファセットラベラー

  23. 23

    高解像度のggplot2を使用した透明な背景グラフ、R

  24. 24

    ggplot2を使用したサイドバイサイド円グラフ

  25. 25

    ggplot2を使用した3方向グラフ(変数、平均、sd)

  26. 26

    ggplot2を使用した3方向グラフ(変数、平均、sd)

  27. 27

    ggplot2を使用した5次元の積み上げ棒グラフ

  28. 28

    Rグラフィックス/ ggplot2は、強調表示された「アクティブ」ラインとグレーアウトされた他のラインでファセットを再現します

  29. 29

    ggplot2とdplyrを使用したプログラミング

ホットタグ

アーカイブ