Появляется это сообщение об ошибке «Ошибка: эстетика должна иметь длину 1 или совпадать с данными (43): x», поскольку вектор afterMinWageLaw
имеет длину 43 значения, а beforeMinWageLaw
имеет длину 303 значенияи именно поэтому вы не можете ссылаться на них в рамках одной и той же эстетики aes()
, я полагаю.
Я бы использовал разные визуализации на одном графике, чтобы вы могли устанавливать разные эстетики также с другой длиной или количеством строкваших данных.Сначала я бы разбил ваши данные на два фрейма данных: один перед законом, а второй после закона.Используя ggplot, вы можете ссылаться на разные фреймы данных на одном графике, в вашем случае, например, так:
#set row indicex ranges for before and after law
row_index_range_before <- 1:303;
row_index_range_after <- 304:346;
#define two data frames
df_before <- data.frame(seattleData)[row_index_range_before, ];
df_after <- data.frame(seattleData)[row_index_range_after, ];
#display data distributions of both data frames with ggplot
x <- ggplot() +
geom_histogram(
data = df_before
,mapping = aes(
x = food_drink_workers
,y = ..density..
,color = "blue")
,fill = "white") +
geom_histogram(
data = df_after
,mapping = aes(
x = food_drink_workers
,y = ..density..
,color = "red")
,fill = "white") +
geom_density(
data = df_before
,mapping = aes(
x = food_drink_workers
,y = ..density..
,fill = "blue")
,alpha = .2) +
geom_density(
data = df_after
,mapping = aes(
x = food_drink_workers
,y = ..density..
,fill = "red")
,alpha = .2) +
scale_colour_manual(
name = "Color"
,values = c("blue" = "blue", "red" = "red")
,labels = c("blue" = "Before Law", "red" = "After Law")) +
scale_fill_manual(
name = "Fill"
,values = c("blue" = "blue", "red" = "red")
,labels = c("blue" = "Before Law","red" = "After Law"));
x + geom_vline(
xintercept = c(108.8636)
,linetype = "dashed"
,color = "red") +
ggtitle("Distribtution of the Data") +
xlab("Seattle MSA Food and Drink Workers") +
ylab("Density");
Но таким образом, вы также можете ссылаться на afterMinWageLaw
и beforeMinWageLaw
как x
вaes()
и удалите data
, ссылаясь на фрейм данных, я думаю.
Чтобы также построить легенду, вам нужно установить color
или fill
в aes()
и добавить scale_colour_manual()
или scale_fill_manual()
на ваш участок. ![enter image description here](https://i.stack.imgur.com/rEJSn.jpg)