好吧,我正在尝试绘制随时间变化的不同州的测试成绩的散点图。在数据框中,有多个未使用的列,以及正在使用的两种列类型。一列是州,数据是 2 个字母的州缩写。第二列类型是分数;这些列的标题为年份。不必要的列位于必要的列之间,数据一直到 2023 年。此外,每个州有两个条目,一个英语一个数学,我只想使用英语分数。例如。
|州|名称|主题|2016|2016sd|2016_eb|2016_eb_sd|2017|2017sd| |AL|阿拉巴马州|数学|46.867684|30.09090|132.3482|50.976749|46.4759|20.9475937| |AL|阿拉巴马州|ela|46.867684|30.09090|132.3482|50.976749|46.4759|20.9475937|
我正在尝试创建一个散点图,将州名称视为系列,x 轴是分数的年份(所以基本上是它来自的列的标题),y 轴实际上是分数的值。我想在图表上的每个数据点之间绘制线条,并且仅绘制 5 个州但所有可用年份的数据。该图应该看起来像这样。 图表示例
好吧,我一直在尝试很多东西,首先我想使用melt来使数据“长”,但我认为这会低调地破坏我的数据。我目前也在尝试使用 ggplot2 创建类似这样的图表:
print( ggplot(School_data, aes(x = state.abb, y = ys_mn_2016_ol)) +
geom_jitter(width = 0.1) +
labs(title = "Average Test Scores in M",
x = "Score",
y = "Year")
x 和 y 只是占位符,因为我知道设置是错误的。我也试图做这样的事情:
ggplot()+
geom_jitter(data=School_data, aes(x=2016,2017(SAME THING???), y=2016,2017(etc. IDK HOW TO DO THIS PART), color=state.abb),
alpha=0.5, width=0.2, height=0.0)+
stat_smooth(data=School_data, aes(x=2016,2017(SAME THING???), y=2016 etc.,color=state.abb),
method="lm", se=F)+
scale_color_manual(values=c("orange","mediumorchid", "turquoise"))+
theme_bw()+
xlab("Score")+
ylab("Year")
这也不起作用,我试图添加行。
我知道我可能需要重新组织数据,但我觉得可以调出特定的组件。这不是为了作业或任何我只是想了解 R 并且喜欢数据组织或图形建议的东西。
好的,我得到了一个可以工作的代码,但如果有人有建议,请告诉我。
#open stuff
library(dplyr)
library(tidyr)
#open dataset
School_data <- read.csv("School_data.csv", header=T)
head(School_data)
# data transformation
School_data_long <- School_data %>%
pivot_longer(cols = starts_with("X20"),
names_to = "Year",
values_to = "Score")
# Filter data to include only English scores and desired states
desired_states <- c("IA", "CA", "NY", "TX", "FL")
School_data_filtered <- School_data_long %>%
filter(subject == "rla", stateabb %in% desired_states)
# Plot the data
library(ggplot2)
ggplot(School_data_filtered, aes(x = Year, y = Score, color = stateabb, group=stateabb)) +
geom_point() +
geom_line() +
scale_color_manual(values=c("forestgreen","mediumorchid", "skyblue","sienna", "pink"))+
labs(title = "English Test Scores by State",
x = "Year",
y = "Score") +
theme_bw()