当前位置: 首页 > 知识库问答 >
问题:

具有最新观测数据的散点图

姜俊友
2023-03-14

我发现在根据每个变量的最新观测结果创建散点图时存在一些问题。我想对每个变量和每个国家的最新obs进行计算,然后计算散点图。我用随机数创建了一个简短的示例,以显示在我的基础结构中,由于df表中缺少观察,一些国家被遗漏了。该图表应为NL和FR的2019Q1。

library(zoo)
library(ggplot2)
library(ggrepel)
library(data.table)


# scatterplot preparation
set.seed(123)
country <- c("AT", "BE", "NL", "DE", "FR", "IT", "ES", "PT", "AT", "BE", "NL", "DE", "FR", "IT", "ES", "PT")
year <- as.yearqtr(c("2019 Q1", "2019 Q1","2019 Q1", "2019 Q1", "2019 Q1", "2019 Q1", "2019 Q1", "2019 Q1", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2", "2019 Q2"))

HPG <- runif(16, min=0, max=5)

HAR <- runif(16, min=-1, max=3)
HAR[c(11,13)] <- NA

df <- data.frame(country, year, HPG, HAR)
df <- as.data.table(df)

df2019q2 <- df[df$year == "2019 Q2"]

ggplot(data = df2019q2, aes(x = HAR, y = HPG, label = country)) + 
  geom_point(colour = "blue") +
  geom_label_repel(aes(label = country),
                   box.padding   = 0.35, 
                   point.padding = 0.5,
                   segment.color = 'grey50') +
 theme_bw() + 
guides(linetype = FALSE, size = FALSE) + 
  scale_y_continuous(name = "HPG", breaks = scales::pretty_breaks(n = 10), limits = c(-6, 4)) +
  scale_x_continuous(name = "HAR", breaks = scales::pretty_breaks(n = 10))

共有1个答案

薛楷
2023-03-14

答案取决于您是希望仅用以前的信息替换丢失的值,还是对所有值取最后一个季度。下面是使用data.table和/或zoo的解决方案。

第一个场景--上一季度所有列(即harhpg):

df2019q2 <- na.omit(df)[order(year), ][, .SD[.N], by = country]

因此,我们首先用na.omit删除所有缺少任何值的行,然后用yearyearyearorder,最后但并非最不重要的是取一个数据子集(.sd),因此每个country,只取最后一行(.n)(正如@uwe所建议的,您也可以使用last(.sd)获取最后

情节看起来像:

第二个场景--分别对每一列进行最后一次观察,例如,对于2019q2,我们保留mpg,对于2019q1,我们保留har

您可以使用zoo中的na.locfhpgmpg列中向前推进上一次观察,例如:

df2019q2 <- df[, c("HPG", "HAR") := lapply(.SD, na.locf), by = country, .SDcols = c("HPG", "HAR")][year == "2019 Q2"]

重要提示:在这两种情况下,您都需要调整ggplot代码来扩展限制(否则将再次丢失信息)-我已经将C(-6,4)替换为C(-6,6):

ggplot(data = df2019q2, aes(x = HAR, y = HPG, label = country)) + 
  geom_point(colour = "blue") +
  geom_label_repel(aes(label = country),
                   box.padding   = 0.35, 
                   point.padding = 0.5,
                   segment.color = 'grey50') +
  theme_bw() + 
  guides(linetype = FALSE, size = FALSE) + 
  scale_y_continuous(name = "HPG", breaks = scales::pretty_breaks(n = 10), limits = c(-6, 6)) +
  scale_x_continuous(name = "HAR", breaks = scales::pretty_breaks(n = 10))
 类似资料:
  • 我试图做一个散点图,并用列表中的不同数字注释数据点。例如,我想绘制vs,并用中的相应数字进行注释。 有什么想法吗?

  • 问题内容: 我正在尝试绘制散点图,并用列表中的不同数字注释数据点。因此,例如,我想绘制并使用中的相应数字进行注释。 有任何想法吗? 问题答案: 我不知道有任何采用数组或列表的绘图方法,但是可以在对中的值进行迭代时使用。 的格式设置选项很多

  • 问题内容: 我有大熊猫,与命名和列,并 我正在尝试使用语法将图散布在x轴和y轴上。 当我尝试时: 我可能会收到一个错误,可能是因为不是列 我收到一个错误: 因此在x轴上没有默认索引。 我遇到错误 如果直接使用我可以画出来 有没有一种使用 语法来绘制索引的方法? 问题答案: 这有点丑陋(我认为您在问题中使用的matplotlib解决方案更好,FWIW),但是您始终可以使用索引作为列usinng创建一

  • 问题内容: 我正在编写一个接口来在Matplotlib中做散点图,并且我希望能够从python脚本访问数据。 现在,我的界面正在执行: 使用标准,我可以执行以下操作: 那行得通。我想要的是类似的东西,但有散点图。 有人可以建议类似的方法吗? 问题答案: 使用绘制图,因此x,y位置称为“偏移”:

  • 问题内容: 我有以下使用numpy和bokeh的小示例脚本: 问题在于,悬停工具仅适用于余弦曲线,而不适用于正弦曲线。 我知道一种选择是同时绘制两个系列并更改余弦数据点的颜色: 但是随后我松开了第二种颜色的图例条目。 如何设法将鼠标悬停在两个数据集上并查看相应的工具提示? 谢谢! 最高 问题答案: 最初的答案是古老且过时的,这是如何使用任何现代版本的Bokeh来实现此目的: