9

ここに私のデータへのリンクがあります

次のコードを使用します。

#read in data
data = read.csv("ggplot_data.csv")

#order by group then year
data = arrange(data, group, year)

#generage ggplot stacked area chart
plot = ggplot(data, aes(x=year,y=value, fill=group)) +
  geom_area() 
plot

これにより、次のチャートが生成されます。 ここに画像の説明を入力

ご覧のとおり、このチャートの 3 つの異なる部分に奇妙な穴があります。

以前にこの問題があり、それについて尋ねたところ、提供された答えは、データをグループごとに並べ替え、次に年ごとに並べ替える必要があるというものでした。当時、その答えは私の穴を修正しました。ただし、今回はすべての穴がなくなるわけではないようです。何か助けはありますか?

4

3 に答える 3

9

ギャップの理由は、一部の時系列が他の時系列より遅く開始されるためです。最初のゼロでない値が現れると、新しい領域は非連続的なジャンプで始まります。ただし、すぐ上の領域は、線形補間によって次のポイントに接続されます。この結果、ギャップが生じます。

たとえば、一番左のギャップを見てください。オリーブの領域は、1982 年の垂直ジャンプでギャップの直後から始まります。ただし、緑の領域は、1981 年の値 (オリーブの領域がゼロ) から 1982 年の値 (オリーブの領域が突然寄与する) まで直線的に増加します。

たとえば、1975 年以降に始まる各時系列の先頭にゼロの値を追加することができます。dplyr機能を使用して、これらの追加の最初の年のデータ フレームを作成します。

first_years <- group_by(data, group, group_id) %>%
               summarise(year = min(year) - 1) %>%
               filter(year > 1974) %>%
               mutate(value = 0, value_pct = 0)
first_years
## Source: local data frame [3 x 5] 
## Groups: group [3]
## 
##    group group_id  year value value_pct
##   (fctr)    (int) (dbl) (dbl)     (dbl)
## 1      c    10006  1981     0         0
## 2      e    10022  2010     0         0
## 3      i    24060  2002     0         0

ご覧のとおり、これら 3 つの新しい値は、プロットの 3 つのギャップに正確に適合します。dataこれで、これらの新しいデータ フレームを以前と同じ方法で並べ替えと組み合わせることができます。

data_complete <- bind_rows(data, first_years) %>%
                 arrange(year, group)

そして、プロットにはギャップがありません。

ggplot(data_complete, aes(x=year,y=value, fill=group)) +
  geom_area()

ここに画像の説明を入力

于 2016-04-09T12:31:02.017 に答える
-1

stackplotテーブルを csv に保存し、python の matplotlib 関数( demo )を使用する方が簡単であることがわかりました。負の数の問題はないようです。

于 2017-01-24T09:54:21.037 に答える