这几天我一直想弄明白但毫无结果
我试图证明,自20世纪90年代以来,沿着某个特定海岸的50多栋房屋已经升值。我必须处理的数据是不完整的,因为从1983年到2023年,每栋房子只卖了2-5次。
我做了一个电子表格,其中的列是年(1983,1984,1985,1986等等),行是特定的属性。我想制作一个多线图,每一线代表一个属性。我知道这看起来会有点混乱,因为每个物业没有那么多的数据点(如,倍,它被出售),但事实上,他们都升值应该是清楚的。
我希望x轴是年份,y轴是它们的售价。每一行都应该是一个属性。
我一直在搜索论坛,但我不知所措
任何帮助都将不胜感激:>
我试过gggplot,但很快就卡住了。我不知道如何定义x=,因为我希望x轴是所有的列(因为我的.csv文件中的每一列都是一年)。
我也试过手动操作。当我这样做的时候,我得到了我想要的东西的一个小版本,但有假的数字和年份:
x <- c(1990,2000,2005,2010, 2015,2020) #FAKE YEARS
y1 <- c(NA,101,105,367, NA, NA) #FAKE PRICES. , y1 is one house.
y2 <- c(1000, 568, 6237, 87, NA, NA) #FAKE PRICES HOUSE TWO, SIMPLY WRITE NA FOR MISSING VALUES
y3 <- c(3,6,12,14,17,15)
plot(x, y1, type="o", col = "blue", pch="o", ylab="y", lty=10)
points(x, y2, col="red", pch="o")
lines(x, y3, col="green", lty=2)
但是当我尝试输入我的实际数据时,虚线消失了,我只得到了图形上的点:
years <- c(1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023)
xx <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 330000, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 599000, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)
xxx <- c(NA, NA, NA, NA, NA, NA, NA, NA, 325000, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 621000, NA, NA, NA, NA, NA, 704000, NA, NA, NA, 100000000, NA, NA, NA, 100000000, NA, NA)
plot(years, xx, type="o", col = "blue", pch="o", ylab="y",lty="solid")
points(years, xxx, col="red", pch="o")
lines(years, xxx, col="green", lty=2)
型
我附上了我的电子表格的图片,但它只是其中的一角。实际的电子表格有57行和40列(直到2023年)。
如果有一种方法可以用ggplot 2来实现,那就太好了,但是如果我不得不使用向量手动键入我的电子表格,那也是可以的
1条答案
按热度按时间cyvaqqii1#
您应该将数据放入数据框中,以便使用
ggplot
进行绘图。将数据透视为长格式也很有用,这意味着对数据框进行格式化,以便您有一个用于年份的列,一个用于行引用的房屋标签的列,以及一个用于房屋价格的列。使用这种格式的数据可以更轻松地进行处理和绘图,并且使用tidyr::pivot_longer
非常简单然而,您的主要问题是,如果您正在绘制线图,则线在有
NA
值的地方断开。任何被NA
值包围的年份都没有任何可连接的东西,因此在图中完全缺失。为了解决这个问题,你可以对缺失的值执行 * 线性插值 *。函数pracma::interp1
可以为您做到这一点。拥有这种格式的数据将使创建具有大量选项的ggplot变得容易,以完全自定义图形的外观。
这是一个完全可重复的例子。为了清楚起见,我对你的例子做了一些修改,因为
xxx
的最后几个值完全使图的其余部分相形见绌。如果这些是真的,你可能想考虑对数y轴。字符串
x1c 0d1x的数据
如果我们使用问题中发布的数据,我们可以使用对数标度来避免在较低的值中丢失细节。为此,我们将
scale_y_continuous
调用更改为型
导致
创建于2023-07-19与reprex v2.0.2