ggplot2 çizgi grafiği “geom_path: Her grup yalnızca bir gözlemden oluşur. Grup estetiğini ayarlamanız gerekiyor mu? ”


170

Bu veri çerçevesi ile ("df"):

year pollution
1 1999 346.82000
2 2002 134.30882
3 2005 130.43038
4 2008  88.27546

Böyle bir çizgi grafik oluşturmaya çalışın:

  plot5 <- ggplot(df, aes(year, pollution)) +
           geom_point() +
           geom_line() +
           labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore")

Aldığım hata:

geom_path: Her grup sadece bir gözlemden oluşur. Grup estetiğini ayarlamanız mı gerekiyor?

Bir çizgi grafik istesem bile grafik dağılım grafiği olarak görünür. Ben yerine çalıştı geom_line()ile geom_line(aes(group = year))ancak bu iş olmadı.

Bir cevapta, yılı bir faktör değişkenine dönüştürmem söylendi. Yaptım ve sorun devam ediyor. Bu str(df)ve dput(df):

'data.frame':   4 obs. of  2 variables:
 $ year     : num  1 2 3 4
 $ pollution: num [1:4(1d)] 346.8 134.3 130.4 88.3
  ..- attr(*, "dimnames")=List of 1
  .. ..$ : chr  "1999" "2002" "2005" "2008"

structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 
134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list(
    c("1999", "2002", "2005", "2008")))), .Names = c("year", 
"pollution"), row.names = c(NA, -4L), class = "data.frame")

Çalıştırdığımda hata vermiyor. Muhtemelen dfsandığınız gibi değil. Lütfen sorunuzu tekrarlanabilir biçimde belirtin, yani çıktısını gösterin dput(df).
G. Grothendieck

değişkenleriniz faktör olabilir, o zaman bunları sayısal hale dönüştürmeniz gerekir
pancar

@ G.Grothendieck Ne dediğini gönderdim. Ben de sayısal dönüştürdüm ve hala sorun var.
megashigger

Soruları gerçekten tekrarlanabilir biçimde belirtmelisiniz. Hatayı yeniden oluşturamazsak size yardımcı olmak zor.
Mario Becerra

Yanıtlar:


344

Yalnızca group = 1ggplot veya geom_line aes () öğesine eklemeniz gerekir .

Çizgi grafikler için, veri noktaları hangi noktaların bağlanacağını bilecek şekilde gruplanmalıdır. Bu durumda, basittir - tüm noktalar bağlanmalıdır, bu nedenle grup = 1. Daha fazla değişken kullanıldığında ve birden çok çizgi çizildiğinde, çizgiler için gruplama genellikle değişken tarafından yapılır.

Referans: R için Yemek Kitabı, Bölüm: Grafikler Bar_and_line_graphs_ (ggplot2), Çizgi grafikler.

Bunu dene:

plot5 <- ggplot(df, aes(year, pollution, group = 1)) +
         geom_point() +
         geom_line() +
         labs(x = "Year", y = "Particulate matter emissions (tons)", 
              title = "Motor vehicle emissions in Baltimore")

Dikkate değer bir şekilde, gruplama groupargüman ile yapılmalıdır . Sadece örneğin gruplamak coloryeterli olmaz. Ben sadece bu sorun vardı ve umarım bu birine koşan yardımcı olur
Tjebo

bu cevap hala geçerli mi? Estetiğe grup = 1 eklemek artık işe yaramıyor gibi görünüyor.
Giacomo

@Giacomo - 3.6.2 Mac'te çalışıyor. Korkunç uyarı alıyordum, ancak grup = 1 eklemek sorunu düzeltti. ggplot (lakemeta, mapping = aes (x = Göl, y = Alan, grup = 1)) + geom_line (boyut = 2, renk = "mavi")
Jenn D.

27

Değişkenlerinizden biri aslında bir faktör değişkeni olduğu için bu hatayı alıyorsunuz. gerçekleştirmek

str(df) 

kontrol etmek için. Ardından, yıl sayılarını "1,2,3,4" düzey sayılarına dönüştürmek yerine tutmak için bu çift değişkenli değişikliği yapın:

df$year <- as.numeric(as.character(df$year))

EDIT: veri.frame pb neden olabilir sınıf "dizi" bir değişken var gibi görünüyor. O zaman deneyin:

df <- data.frame(apply(df, 2, unclass))

ve tekrar çizmek?


3
Bu benim için uygun bir cevap çünkü sorunu kökten
düzeltiyor

1
Bu uyarıyı önlemek için iyi bir cevap!
Mihai

2

Veri çerçevesi ile benzer bir sorun vardı:

group time weight.loss
1 Control  wl1    4.500000
2    Diet  wl1    5.333333
3  DietEx  wl1    6.200000
4 Control  wl2    3.333333
5    Diet  wl2    3.916667
6  DietEx  wl2    6.100000
7 Control  wl3    2.083333
8    Diet  wl3    2.250000
9  DietEx  wl3    2.200000

Ben x ekseni için değişken sayısal olması gerektiğini düşünüyorum, böylece geom_line çizgi çizmek için noktaları bağlamak için nasıl bilir.

2. sütunu sayısal olarak değiştirdikten sonra:

 group time weight.loss
1 Control    1    4.500000
2    Diet    1    5.333333
3  DietEx    1    6.200000
4 Control    2    3.333333
5    Diet    2    3.916667
6  DietEx    2    6.100000
7 Control    3    2.083333
8    Diet    3    2.250000
9  DietEx    3    2.200000

sonra çalışır.


1

R'yi yeni bir oturumda başlatın ve şunu yapıştırın:

library(ggplot2)

df <- structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 
134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list(
    c("1999", "2002", "2005", "2008")))), .Names = c("year", 
"pollution"), row.names = c(NA, -4L), class = "data.frame")

df[] <- lapply(df, as.numeric) # make all columns numeric

ggplot(df, aes(year, pollution)) +
           geom_point() +
           geom_line() +
           labs(x = "Year", 
                y = "Particulate matter emissions (tons)", 
                title = "Motor vehicle emissions in Baltimore")

R'yi yeni bir oturumda başlatın ve yazımdaki kodu içine yapıştırın.
G. Grothendieck

Bu sorunu çözdünüz mü? Seninle aynı problemim var ki her x değeri için sadece bir değerim var. Yanıtınız için bekliyorum. Teşekkürler.
Hoang Le

0

Benzer bir istem aldım. Çünkü x eksenini yüzde olarak belirtmiştim (örneğin:% 10 A,% 20 B, ....). Yani alternatif bir yaklaşım, bu değerleri çarpmanız ve bunları en basit biçimde yazmanız olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.