0

パレート図のバリエーションを作成しようとしています。コードに沿って移動すると、数時間自分で解決できない問題に直面します。これは、パッケージ ggplot2 のデータ順序に関するものであり (1)、それに応じてラベルの名前を変更することです (2)。

(1)彩度曲線で順序付けられたバー プロットを作成したいので、X から X-1 までのダミー変数を作成したので、出力 (1) でわかるように、バーは高いものから低いものに並べ替えられます。この問題を回避することで、修正できない 2 つ目の問題が発生しました。

(2) df に、x 軸で見たいすべての種を含む列があります。ただし、ggplot では、それに応じてそれらを印刷することはできません。実際、コマンドを追加してから、x 軸にラベルが付けられません。どういうわけか、エラーは発生しません。

私の質問は、種のリストを x 軸として使用する方法はありますか? (ただし、データは高いものから低いものへと並べ替える必要があることを覚えておいてください) または、ラベル付けの問題を解決する方法を簡単に見つけられる人がいますか?

乾杯

dfb
     Beech id     proc     kommu    Order
1   Va fla  1 8.749851  8.749851  Psocopt
2       Er  2 7.793812 16.543663    Acari
3 Faga dou  3 7.659406 24.203069     Dipt
4      Tro  4 6.675941 30.879010    Acari
5  Hal ann  5 6.289307 37.168317     Dipt
6    Stigm  6 3.724406 40.892723    Acari
7   Di fag  7 3.642574 44.535297 Lepidopt
8    Phyfa  8 3.390545 47.925842 Neoptera
9   Phylma  9 2.766040 50.691881 Lepidopt

データ例:

structure(list(Beech = c("Va fla", "Er", "Faga dou", "Tro", "Hal ann", 
"Stigm", "Di fag", "Phyfa", "Phylma"), id = c(1, 2, 3, 4, 5, 
6, 7, 8, 9), proc = c(8.749851, 7.793812, 7.659406, 6.675941, 
6.289307, 3.724406, 3.642574, 3.390545, 2.76604), kommu = c(8.749851, 
16.543663, 24.203069, 30.87901, 37.168317, 40.892723, 44.535297, 
47.925842, 50.691881), Order = c("Psocopt", "Acari", "Dipt", 
"Acari", "Dipt", "Acari", "Lepidopt", "Neoptera", "Lepidopt")), row.names = c(NA, 
-9L), class = c("tbl_df", "tbl", "data.frame"))
library(openxlsx)
library(ggplot2)

dfb <- data.xlsx ###(df containing different % values per species)
labelb <- dfb$Beech ###(list of 22 items; same number as x-values)

p <-ggplot(dfb, aes(x=id))
p <- p + geom_bar(aes(y = proc), stat = "identity", fill = "lightgreen")
p <- p + geom_line(aes(y = kommu/10), color = "orange", size = 2) + geom_point(aes(y = kommu/10),size = 2)
p <- p + scale_y_continuous(sec.axis = sec_axis(~.*10, name ="Total biocoenosis[%]"))
p <- p + labs(y = "Species [%]",
              x = "Species")
p <- p + scale_x_discrete(labels = labelb)
p <- p + theme(legend.position = c(0.8, 0.9))

ここに画像の説明を入力

--> 他のコメントへの回答: 基本的に私の問題は、バーに種名のラベルが付いていないことです。これは基本的に 1 から 22 である私のダミー変数による結果であることを知っています。しかし、この入力は機能しません

p <- p + scale_x_discrete(labels = labelb)

しかし、あなたの提案に戻ります。ええ、私はこの投稿を作成した直後に tidyverse を試しましたが、十分に処理できませんでした。しかし、あなたのアイデアは私にとっては何もしません。ggplot コマンドを使用するようなものです。

  arrange(Beech) %>%
  mutate(Beech = factor(Beech, levels = unique(.$Beech))) %>%
  ggplot(aes(Beech, proc)) +
  geom_col()

dplyrを使用した順序付けられていない棒文字

4

2 に答える 2

0

提供されたデータベース サンプルを使用してコードを編集したところ、ご要望どおりのことができたと思います。

Beech基本的には、降順のprocに応じてソートしてから、factorに変換します。変更されたコードと結果は次のとおりです。

p <-
  dfb %>% 
  arrange(desc(proc)) %>%
  mutate(Beech = factor(Beech, levels = unique(.$Beech))) %>%
  ggplot(aes(Beech)) +
  geom_bar(aes(y = proc), stat = "identity", fill = "lightgreen") +
  geom_line(aes(y = kommu/10, x=as.integer(Beech)), color = "orange", size = 2) + 
  geom_point(aes(y = kommu/10),size = 2) +
  labs(y = "Species [%]", x = "Species") +
  scale_x_discrete("Species") +
  scale_y_continuous(sec.axis = sec_axis(~.*10, name ="Total biocoenosis[%]")) + 
  theme(legend.position = c(0.8, 0.9))
p

ここに画像の説明を入力

x=as.integer(Beech)注: geom_lineは要素ではなく数値で機能するため、追加して geom_line を少し調整する必要がありました。

于 2020-08-03T14:07:37.967 に答える