ggplot2 लाइन चार्ट “geom_path: प्रत्येक समूह में केवल एक अवलोकन से युक्त होता है। क्या आपको समूह सौंदर्य को समायोजित करने की आवश्यकता है? "


170

इस डेटा फ़्रेम के साथ ("df"):

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

मैं इस तरह एक लाइन चार्ट बनाने की कोशिश करता हूं:

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

मुझे जो त्रुटि मिलती है वह है:

geom_path: प्रत्येक समूह में केवल एक अवलोकन होता है। क्या आपको समूह सौंदर्य को समायोजित करने की आवश्यकता है?

चार्ट एक स्कैटर प्लॉट के रूप में दिखाई देता है, भले ही मुझे एक लाइन चार्ट चाहिए। मैं के geom_line()साथ बदलने की कोशिश की, geom_line(aes(group = year))लेकिन वह काम नहीं किया।

एक उत्तर में मुझे बताया गया कि वर्ष को एक कारक चर में बदलना है। मैंने किया और समस्या बनी रहती है। इस के उत्पादन में है str(df)और 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")

इसे चलाने पर मुझे कोई त्रुटि नहीं होती है। इसकी संभावना वह dfनहीं है जो आप सोचते हैं कि यह है। कृपया अपने प्रश्न को प्रतिलिपि प्रस्तुत करने योग्य रूप में बताएं, अर्थात का आउटपुट दिखाएं dput(df)
जी। ग्रोथेंडिक

हो सकता है कि आपके चर कारक हैं, तो आपको उन्हें न्यूमेरिक में बदलने की आवश्यकता होगी
चुकंदर

@ G.Grothendieck मैंने वह पोस्ट किया जो आपने कहा था। मैंने संख्यात्मक में भी परिवर्तित किया और अभी भी समस्या है।
मेगाशिगर

आपको वास्तव में प्रतिलिपि प्रस्तुत करने योग्य रूप में प्रश्न पूछना चाहिए। यदि हम त्रुटि को पुनः प्राप्त नहीं कर सकते हैं तो आपकी सहायता करना कठिन है।
मारियो बेसेरा

जवाबों:


344

आपको केवल group = 1ggplot या geom_line anes () में जोड़ना होगा ।

लाइन ग्राफ़ के लिए, डेटा बिंदुओं को समूहीकृत किया जाना चाहिए ताकि यह पता चले कि किन बिंदुओं को कनेक्ट करना है। इस मामले में, यह सरल है - सभी बिंदुओं को जोड़ा जाना चाहिए, इसलिए समूह = 1। जब अधिक चर का उपयोग किया जाता है और कई लाइनें खींची जाती हैं, तो लाइनों के लिए समूहन आमतौर पर चर द्वारा किया जाता है।

संदर्भ: आर, अध्याय के लिए रसोई की किताब: रेखांकन Bar_and_line_graphs_ (ggplot2), रेखा रेखांकन।

इसे इस्तेमाल करे:

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")

ध्यान दें, groupतर्क के साथ समूहीकरण करना होगा । केवल उदाहरण के लिए समूह बनाना colorपर्याप्त नहीं होगा। मुझे बस यह परेशानी थी और आशा है कि यह किसी को उसी में चलने में मदद करता है
Tjebo

क्या यह उत्तर अभी भी मान्य है? सौंदर्यशास्त्र में समूह = 1 जोड़ना अब काम नहीं करता है।
जियाकोमो

@ गियाकोमो - मेरे लिए काम करता है, एक मैक पर 3.6.2 पर। खतरनाक चेतावनी मिल रही थी, लेकिन समूह = 1 को जोड़ने से समस्या ठीक हो गई। ggplot (lakemeta, मैपिंग = aes (x = झील, y = क्षेत्र, समूह = 1)) + geom_line (आकार = 2, रंग = "नीला")
जेन डी। डी।

27

आपको यह त्रुटि मिलती है क्योंकि आपका एक चर वास्तव में एक कारक चर है। निष्पादित

str(df) 

यह जाँचने के लिए। फिर वर्ष संख्याओं को "1,2,3,4" स्तर संख्या में बदलने के बजाय इस दोहरे परिवर्तनशील परिवर्तन को करें:

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

संपादित करें: ऐसा प्रतीत होता है कि आपके डेटा.फ्रेम में कक्षा "सरणी" का एक चर है जो pb का कारण हो सकता है। फिर कोशिश करें:

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

और फिर से साजिश?


3
यह मेरे लिए एक सुविधाजनक उत्तर है क्योंकि यह इस समस्या को जड़ से ठीक करता है
मेधाट

1
इस चेतावनी को रोकने के लिए अच्छा जवाब!
Mihai

2

मुझे डेटा फ़्रेम में समान समस्या थी:

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

मुझे लगता है कि x अक्ष के लिए चर संख्यात्मक होना चाहिए, ताकि geom_line जानता है कि रेखा खींचने के लिए बिंदुओं को कैसे जोड़ा जाए।

जब मैं संख्यात्मक के लिए 2 कॉलम बदल देता हूं:

 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

तब यह काम करता है।


1

एक नए सत्र में आर शुरू करें और इसे इसमें पेस्ट करें:

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")

एक नए सत्र में आर शुरू करें और इसमें मेरी पोस्ट में कोड पेस्ट करें।
जी। ग्रोथेंडीक

क्या आपने इस समस्या का पता लगाया है। मुझे आपकी एक ही समस्या है जो मेरे पास प्रत्येक x मान के लिए केवल एक मूल्य है। तुम्हारे जवाब के लिए इन्तेजार कर रहा हूँ। धन्यवाद।
होआंग ले

0

मुझे एक समान संकेत मिला। ऐसा इसलिए था क्योंकि मैंने कुछ प्रतिशत के संदर्भ में एक्स-अक्ष निर्दिष्ट किया था (उदाहरण के लिए: 10% ए, 20% बी, ....)। इसलिए एक वैकल्पिक दृष्टिकोण यह हो सकता है कि आप इन मूल्यों को गुणा करें और उन्हें सरलतम रूप में लिखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.