2017-08-21 2 views
0

Ich habe R vorher noch nicht benutzt und habe eine Bewertung für eine Einführung in die Statistikklasse. Ich habe meine Daten gefunden und muss sie grafisch darstellen. Ich plane Jahre als Kategorien gegen Liter Alkohol, die jedes Jahr von der Bevölkerung konsumiert werden. Meine Daten sieht ein bisschen wie folgt aus:Wie kann ich die x-Achse an einem festen Punkt starten statt bei 0 beginnen?

Year  Litres Per Capita 
1960-61 67,703 9.34 
1961-62 69,408 9.38 
1962-63 71,657 9.47 
1963-64 75,590 9.79 
1964-65 79,674 10.10 
1965-66 80,866 10.00 
1966-67 85,015 10.29 
1967-68 90,946 10.78 
1968-69 95,782 11.12 
1969-70 101,951 11.58 
1970-71 105,595 11.59 
1971-72 109,156 11.58 
1972-73 116,682 12.15 

Mein Problem ist, dass es bei dem Versuch, zu planen, ist es überhaupt nicht kommen, wie ich brauche es. Ich kämpfe auch mit ein paar Dingen und fühle, dass ich Dinge auf die lange/harte Art mache. Dies ist, was ich bisher getan:

> View(Alcohol_consumption_2013_14) 
> Year <- Alcohol_consumption_2013_14$Year 
> Litres <- Alcohol_consumption_2013_14$`Litres Pure Alcohol` 
> Capita <- Alcohol_consumption_2013_14$`Per Capita Consumption` 
> x=c(Year) 
> y=c(Litres) 
> plot(x,y) 
    Error in plot.window(...) : need finite 'xlim' values 
    In addition: Warning messages: 
    1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion 
    2: In min(x) : no non-missing arguments to min; returning Inf 
    3: In max(x) : no non-missing arguments to max; returning -Inf 
> Year <- as.numeric(Year) 
    Warning message: 
    NAs introduced by coercion 
> barplot(Litres,Year) 
    Error in plot.window(xlim, ylim, log = log, ...) : 
    need finite 'xlim' values 
> x=c(1960-61,1961-62,1962-63,1963-64,1964-65,1965-66,1966-67,1967-68,1968- 
    69,1969-70,1970-71,1971-72,1972-73,1973-74,1974-75,1975-76,1976-77,1977- 
    78,1978-79,1979-80,1980-81,1981-82,1982-83,1983-84,1984-85,1985-86,1986- 
    87,1987-88,1988-89,1989-90,1990-91,1991-92,1992-93,1993-94,1994-95,1995- 
    96,1996-97,1997-98,1998-99,1999-2000,2000-01,2001-02,2002-03,2003-04,2004- 
    05,2005-06,2006-07,2007-08,2008-09,2009-10,2010-11,2011-12,2012-13,2013-14) 
> plot(x,y) 

und dann kam auf diesem graph starting at 0, rather than in year categories

Wie kann ich dieses Problem beheben?

+0

Ihre ** x ** Variable ist nicht numerisch, es ist ein Zeichen: Es enthält zwei Zahlen und ein Bindestrich. Sie müssen es in numerisch konvertieren. – EugenR

+0

@ ephy_92 Wenn eine der folgenden Antworten Ihr Problem gelöst hat, denken Sie bitte daran, die Antwort zu akzeptieren, indem Sie auf das "v" -Schild unter den Auf- und Abwärtstasten neben dem Anfang der Antwort klicken. Vielen Dank. – coffeinjunky

Antwort

0

Um ein kleines Beispiel (zu lang für einen Kommentar) zur Verfügung stellen, sollten Sie Folgendes beachten:

Zuerst Ihre Daten:

df <- structure(list(Year = structure(1:13, .Label = c("1960-61", "1961-62", 
"1962-63", "1963-64", "1964-65", "1965-66", "1966-67", "1967-68", 
"1968-69", "1969-70", "1970-71", "1971-72", "1972-73"), class = "factor"), 
    Litres = structure(c(5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 
    1L, 2L, 3L, 4L), .Label = c("101,951", "105,595", "109,156", 
    "116,682", "67,703", "69,408", "71,657", "75,590", "79,674", 
    "80,866", "85,015", "90,946", "95,782"), class = "factor"), 
    PerCapita = c(9.34, 9.38, 9.47, 9.79, 10.1, 10, 10.29, 10.78, 
    11.12, 11.58, 11.59, 11.58, 12.15), yr = 1:13), .Names = c("Year", 
"Litres", "PerCapita", "yr"), row.names = c(NA, -13L), class = "data.frame") 

die jetzt bei str(df) Werfen wir einen Blick:

str(df) 
'data.frame': 13 obs. of 4 variables: 
$ Year  : Factor w/ 13 levels "1960-61","1961-62",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ Litres : Factor w/ 13 levels "101,951","105,595",..: 5 6 7 8 9 10 11 12 13 1 ... 
$ PerCapita: num 9.34 9.38 9.47 9.79 10.1 ... 

Wir sehen, dass sowohl Liter als auch Jahr Faktoren sind. Ich werde plotten Litres; Beachten Sie jedoch, dass ein Komma als Dezimalpunkt verwendet wird. Ich ändere dies mit:

df$Litres <- as.numeric(gsub(",", "\\.", as.character(df$Litres))) 

Wir sehen, dass Year nicht wirklich ein Jahr, sondern ein Zwei-Jahres-Bereich als Zeichen gespeichert. Wenn R ein Zeichen wie "1960-61" liest, versteht es nicht, was das bedeutet. Wir können hier viel Neuformatierung tun, oder etwas noch einfacher: unter der Annahme, keine wiederholten Zeitintervalle gibt es, ich erstellen Sie eine einfache Sequenz von 1 bis zum Ende Ihres Datenrahmen:

df$yr <- 1:nrow(df) 

Das gibt mir:

head(df, 3) 
    Year Litres PerCapita yr 
1 1960-61 67.703  9.34 1 
2 1961-62 69.408  9.38 2 
3 1962-63 71.657  9.47 3 

Nun verwende ich diese eine eine Ihrer Variablen plotten, die x-Achse zu unterdrücken:

plot(df$yr, df$Litres, xaxt='n') 

um die x-Achse mit den entsprechenden Etiketten (die Jahr-Bereiche) zu erhalten, wir Rufen Siean:

axis(1, at = df$yr, labels = df$Year) 

Dies gibt Ihnen:

enter image description here

Was hier geschehen ist, ist, dass wir ein Grundstück mit impliziter x-Achsenbeschriftung von 1 bis n erstellt haben, aber wir haben R erzählt Verwenden Sie unterschiedliche Beschriftungen für die X-Achsen-Ticks.

Wenn Ihre Jahre tatsächlich Jahre seien und nicht seltsam Bereiche würde die folgende eine weitere Option:

# first, create the years: 
df$yr <- substr(df$Year, 1,4) 
# this gives us: 
head(df) 
    Year Litres PerCapita yr 
1 1960-61 67.703  9.34 1960 
2 1961-62 69.408  9.38 1961 
3 1962-63 71.657  9.47 1962 
4 1963-64 75.590  9.79 1963 
5 1964-65 79.674  10.10 1964 
6 1965-66 80.866  10.00 1965 

# now convert it to date, specifying the format: 
df$yr_date <- as.Date(df$yr, format = "%Y") 

head(df) 
    Year Litres PerCapita yr yr_date 
1 1960-61 67.703  9.34 1960 1960-08-21 
2 1961-62 69.408  9.38 1961 1961-08-21 
3 1962-63 71.657  9.47 1962 1962-08-21 

Dies kann nun grafisch dargestellt werden:

plot(df$yr_date, df$Litres) 

enter image description here

Alternativ Mit diesen Jahren könnten Sie auch

df$yr_num <- as.numeric(df$yr) 
plot(df$yr_num, df$Litres) 
012 tun
0

Sie x wie folgt definiert:

> x=c(1960-61,1961-62,1962-63,1963-64,1964-65,1965-66,1966-67,1967-68,1968- 
    69,1969-70,1970-71,1971-72,1972-73,1973-74,1974-75,1975-76,1976-77,1977- 
    78,1978-79,1979-80,1980-81,1981-82,1982-83,1983-84,1984-85,1985-86,1986- 
    87,1987-88,1988-89,1989-90,1990-91,1991-92,1992-93,1993-94,1994-95,1995- 
    96,1996-97,1997-98,1998-99,1999-2000,2000-01,2001-02,2002-03,2003-04,2004- 
    05,2005-06,2006-07,2007-08,2008-09,2009-10,2010-11,2011-12,2012-13,2013-14) 

Dies ist ein Vektor von Gleichungen: 1960-61 = 1899, 1961-62 = 1899, ..., 1999-2000 = -1, 2000-01 = 1999 ... 2013-14 = 1999.

Als Ergebnis Ihr Grundstück hat einen Punkt bei x = -1, ein paar Punkte bei x = 1899 und ein anderes Bündel bei x = 1999

Versuchen Sie stattdessen Folgendes? Es ist nicht der optimalste Code, aber es ist in der Nähe zu dem, was Sie bereits haben, so sollte es sein, leicht zu verstehen:

# Year & Litres should be based on your dataset. No manipulation needed. 
Year <- Alcohol_consumption_2013_14$Year 
Litres <- Alcohol_consumption_2013_14$`Litres Pure Alcohol` 

barplot(Litres, names.arg = Year) 
plot(factor(Year), Litres) 
Verwandte Themen